drop launch4j demos, docs, and source

This commit is contained in:
zzz
2014-04-06 14:03:43 +00:00
parent 24e807b238
commit 6d46344171
144 changed files with 0 additions and 13068 deletions

View File

@ -1,62 +0,0 @@
<project name="launch4j" default="compile" basedir=".">
<property name="src" location="src" />
<property name="lib" location="lib" />
<property name="build" location="build" />
<property name="jar" location="./${ant.project.name}.jar" />
<property name="launch4j.dir" location="." />
<path id="dist.classpath">
<pathelement path="${build}" />
<fileset dir="${lib}">
<include name="**/*.jar" />
</fileset>
</path>
<target name="init">
<tstamp />
<mkdir dir="${build}" />
</target>
<target name="compile" depends="init" description="compile the source">
<javac srcdir="${src}" destdir="${build}" classpathref="dist.classpath" source="1.4" debug="on" />
<copy todir="${build}/images">
<fileset dir="${src}/images">
<include name="**/*" />
</fileset>
</copy>
<copy todir="${build}">
<fileset dir="${src}">
<include name="**/*.properties" />
</fileset>
</copy>
</target>
<target name="jar" depends="compile" description="create jar">
<fileset dir="${lib}" id="lib.dist.fileset">
<include name="**/*.jar" />
</fileset>
<pathconvert pathsep=" " property="dist.classpath" refid="lib.dist.fileset">
<map from="${lib}" to="./lib" />
</pathconvert>
<!-- Put everything in ${build} into a jar file -->
<jar jarfile="${jar}">
<fileset dir="${build}" excludes="**/messages_es.properties" />
<manifest>
<attribute name="Main-Class" value="net.sf.launch4j.Main" />
<attribute name="Class-Path" value=". ${dist.classpath}" />
</manifest>
</jar>
</target>
<target name="demo" depends="jar" description="build the demos">
<ant dir="./demo/ConsoleApp" inheritAll="false" />
<ant dir="./demo/SimpleApp" inheritAll="false" />
</target>
<target name="clean" description="clean up">
<delete dir="${build}" />
<delete file="${jar}" />
<ant dir="./demo/ConsoleApp" target="clean" inheritAll="false" />
<ant dir="./demo/SimpleApp" target="clean" inheritAll="false" />
</target>
</project>

View File

@ -1,57 +0,0 @@
<project name="ConsoleApp" default="exe" basedir=".">
<property name="src" location="src" />
<property name="lib" location="lib" />
<property name="build" location="build" />
<property name="launch4j.dir" location="../.." />
<path id="dist.classpath">
<pathelement path="${build}" />
<fileset dir="${lib}">
<include name="**/*.jar" />
</fileset>
</path>
<target name="init">
<tstamp />
<mkdir dir="${build}" />
</target>
<target name="compile" depends="init" description="compile the source">
<javac srcdir="${src}" destdir="${build}" classpathref="dist.classpath" source="1.4" debug="on" />
</target>
<target name="jar" depends="compile" description="create the jar">
<fileset dir="${lib}" id="lib.dist.fileset">
<include name="**/*.jar" />
</fileset>
<pathconvert pathsep=" " property="dist.classpath" refid="lib.dist.fileset">
<map from="${lib}" to=".\lib" />
</pathconvert>
<!-- Put everything in ${build} into a jar file -->
<jar jarfile="${ant.project.name}.jar">
<fileset dir="${build}" includes="**/*" />
<manifest>
<!-- SET YOUR MAIN CLASS HERE -->
<attribute name="Main-Class" value="net.sf.launch4j.example.ConsoleApp" />
<attribute name="Class-Path" value=". ${dist.classpath}" />
</manifest>
</jar>
</target>
<target name="exe" depends="jar">
<taskdef name="launch4j" classname="net.sf.launch4j.ant.Launch4jTask" classpath="${launch4j.dir}/launch4j.jar
:${launch4j.dir}/lib/xstream.jar" />
<launch4j>
<config headerType="console" jar="ConsoleApp.jar" outfile="ConsoleApp.exe" errTitle="ConsoleApp" chdir="." customProcName="true" icon="l4j/ConsoleApp.ico">
<singleInstance mutexName="net.sf.launch4j.example.ConsoleApp" />
<jre minVersion="1.4.0" />
</config>
</launch4j>
</target>
<target name="clean" description="clean up">
<delete dir="${build}" />
<delete file="${ant.project.name}.jar" />
<delete file="${ant.project.name}.exe" />
</target>
</project>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 766 B

View File

@ -1,8 +0,0 @@
Put your jar libs here and the build script will include them
in the classpath stored inside the jar manifest.
In order to run your application move the output exe file from
the dist directory to the same level as lib.
SimpleApp.exe
lib/
lib/xml.jar

View File

@ -1 +0,0 @@
To build the example application set JAVA_HOME and ANT_HOME environment variables.

View File

@ -1,72 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.sf.launch4j.example;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class ConsoleApp {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("Hello World!\n\nJava version: ");
sb.append(System.getProperty("java.version"));
sb.append("\nJava home: ");
sb.append(System.getProperty("java.home"));
sb.append("\nCurrent dir: ");
sb.append(System.getProperty("user.dir"));
if (args.length > 0) {
sb.append("\nArgs: ");
for (int i = 0; i < args.length; i++) {
sb.append(args[i]);
sb.append(' ');
}
}
sb.append("\n\nEnter a line of text, Ctrl-C to stop.\n\n>");
System.out.print(sb.toString());
try {
BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = is.readLine()) != null && !line.equalsIgnoreCase("quit")) {
System.out.print("You wrote: " + line + "\n\n>");
}
is.close();
System.exit(123);
} catch (IOException e) {
System.err.print(e);
}
}
}

View File

@ -1,30 +0,0 @@
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View File

@ -1,52 +0,0 @@
<project name="SimpleApp" default="exe" basedir=".">
<property name="src" location="src" />
<property name="lib" location="lib" />
<property name="build" location="build" />
<property name="launch4j.dir" location="../.." />
<path id="dist.classpath">
<pathelement path="${build}" />
<fileset dir="${lib}">
<include name="**/*.jar" />
</fileset>
</path>
<target name="init">
<tstamp />
<mkdir dir="${build}" />
</target>
<target name="compile" depends="init" description="compile the source">
<javac srcdir="${src}" destdir="${build}" classpathref="dist.classpath" source="1.4" debug="on" />
</target>
<target name="jar" depends="compile" description="create the jar">
<fileset dir="${lib}" id="lib.dist.fileset">
<include name="**/*.jar" />
</fileset>
<pathconvert pathsep=" " property="dist.classpath" refid="lib.dist.fileset">
<map from="${lib}" to=".\lib" />
</pathconvert>
<!-- Put everything in ${build} into a jar file -->
<jar jarfile="${ant.project.name}.jar">
<fileset dir="${build}" includes="**/*" />
<manifest>
<!-- SET YOUR MAIN CLASS HERE -->
<attribute name="Main-Class" value="net.sf.launch4j.example.SimpleApp" />
<attribute name="Class-Path" value=". ${dist.classpath}" />
</manifest>
</jar>
</target>
<target name="exe" depends="jar">
<taskdef name="launch4j" classname="net.sf.launch4j.ant.Launch4jTask" classpath="${launch4j.dir}/launch4j.jar
:${launch4j.dir}/lib/xstream.jar" />
<launch4j configFile="./l4j/SimpleApp.xml" />
</target>
<target name="clean" description="clean up">
<delete dir="${build}" />
<delete file="${ant.project.name}.jar" />
<delete file="${ant.project.name}.exe" />
</target>
</project>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 766 B

View File

@ -1,18 +0,0 @@
<launch4jConfig>
<headerType>gui</headerType>
<jar>../SimpleApp.jar</jar>
<outfile>../SimpleApp.exe</outfile>
<errTitle>SimpleApp</errTitle>
<chdir>.</chdir>
<customProcName>true</customProcName>
<icon>SimpleApp.ico</icon>
<jre>
<minVersion>1.4.0</minVersion>
</jre>
<splash>
<file>splash.bmp</file>
<waitForWindow>true</waitForWindow>
<timeout>60</timeout>
<timeoutErr>true</timeoutErr>
</splash>
</launch4jConfig>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

View File

@ -1,8 +0,0 @@
Put your jar libs here and the build script will include them
in the classpath stored inside the jar manifest.
In order to run your application move the output exe file from
the dist directory to the same level as lib.
SimpleApp.exe
lib/
lib/xml.jar

View File

@ -1 +0,0 @@
To build the example application set JAVA_HOME and ANT_HOME environment variables.

View File

@ -1,104 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.sf.launch4j.example;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
public class SimpleApp extends JFrame {
public SimpleApp(String[] args) {
super("Java Application");
final int inset = 100;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds (inset, inset,
screenSize.width - inset * 2, screenSize.height - inset * 2);
JMenu menu = new JMenu("File");
menu.add(new JMenuItem("Open"));
menu.add(new JMenuItem("Save"));
JMenuBar mb = new JMenuBar();
mb.setOpaque(true);
mb.add(menu);
setJMenuBar(mb);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(123);
}});
setVisible(true);
StringBuffer sb = new StringBuffer("Java version: ");
sb.append(System.getProperty("java.version"));
sb.append("\nJava home: ");
sb.append(System.getProperty("java.home"));
sb.append("\nCurrent dir: ");
sb.append(System.getProperty("user.dir"));
if (args.length > 0) {
sb.append("\nArgs: ");
for (int i = 0; i < args.length; i++) {
sb.append(args[i]);
sb.append(' ');
}
}
JOptionPane.showMessageDialog(this,
sb.toString(),
"Info",
JOptionPane.INFORMATION_MESSAGE);
}
public static void setLAF() {
JFrame.setDefaultLookAndFeelDecorated(true);
Toolkit.getDefaultToolkit().setDynamicLayout(true);
System.setProperty("sun.awt.noerasebackground","true");
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception e) {
System.err.println("Failed to set LookAndFeel");
}
}
public static void main(String[] args) {
setLAF();
new SimpleApp(args);
}
}

View File

@ -1,3 +0,0 @@
JRE/SDK 1.4.0 or higher must be installed on your system to run this demo.
try running it with some command line arguments...

View File

@ -1,23 +0,0 @@
Copyright (c) 2004, 2008 Grzegorz Kowal
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
Except as contained in this notice, the name(s) of the above copyright holders
shall not be used in advertising or otherwise to promote the sale, use or other
dealings in this Software without prior written authorization.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@ -1,33 +0,0 @@
# Project: consolehead
# Makefile created by Dev-C++ 4.9.9.2
CPP = g++.exe
CC = gcc.exe
WINDRES = windres.exe
RES =
OBJ = ../../head/consolehead.o ../../head/head.o $(RES)
LINKOBJ = ../../head/consolehead.o ../../head/head.o $(RES)
LIBS = -L"C:/Dev-Cpp/lib" -n -s
INCS = -I"C:/Dev-Cpp/include"
CXXINCS = -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include"
BIN = consolehead.exe
CXXFLAGS = $(CXXINCS) -fexpensive-optimizations -O3
CFLAGS = $(INCS) -fexpensive-optimizations -O3
RM = rm -f
.PHONY: all all-before all-after clean clean-custom
all: all-before consolehead.exe all-after
clean: clean-custom
${RM} $(OBJ) $(BIN)
$(BIN): $(OBJ)
# $(CC) $(LINKOBJ) -o "consolehead.exe" $(LIBS)
../../head/consolehead.o: consolehead.c
$(CC) -c consolehead.c -o ../../head/consolehead.o $(CFLAGS)
../../head/head.o: ../head.c
$(CC) -c ../head.c -o ../../head/head.o $(CFLAGS)

View File

@ -1,65 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
Except as contained in this notice, the name(s) of the above copyright holders
shall not be used in advertising or otherwise to promote the sale, use or other
dealings in this Software without prior written authorization.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#include "../resource.h"
#include "../head.h"
int main(int argc, char* argv[])
{
setConsoleFlag();
LPTSTR cmdLine = GetCommandLine();
if (*cmdLine == '"') {
if (*(cmdLine = strchr(cmdLine + 1, '"') + 1)) {
cmdLine++;
}
} else if ((cmdLine = strchr(cmdLine, ' ')) != NULL) {
cmdLine++;
} else {
cmdLine = "";
}
int result = prepare(cmdLine);
if (result == ERROR_ALREADY_EXISTS) {
char errMsg[BIG_STR] = {0};
loadString(INSTANCE_ALREADY_EXISTS_MSG, errMsg);
msgBox(errMsg);
closeLogFile();
return 2;
}
if (result != TRUE) {
signalError();
return 1;
}
result = (int) execute(TRUE);
if (result == -1) {
signalError();
} else {
return result;
}
}

View File

@ -1,108 +0,0 @@
[Project]
FileName=consolehead.dev
Name=consolehead
UnitCount=4
Type=1
Ver=1
ObjFiles=
Includes=
Libs=
PrivateResource=
ResourceIncludes=
MakeIncludes=
Compiler=
CppCompiler=
Linker=-n_@@_
IsCpp=0
Icon=
ExeOutput=
ObjectOutput=..\..\head
OverrideOutput=0
OverrideOutputName=consolehead.exe
HostApplication=
Folders=
CommandLine=
UseCustomMakefile=0
CustomMakefile=Makefile.win
IncludeVersionInfo=0
SupportXPThemes=0
CompilerSet=0
CompilerSettings=0000000001001000000100
[Unit1]
FileName=consolehead.c
CompileCpp=0
Folder=consolehead
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[VersionInfo]
Major=0
Minor=1
Release=1
Build=1
LanguageID=1033
CharsetID=1252
CompanyName=
FileVersion=
FileDescription=Developed using the Dev-C++ IDE
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=
AutoIncBuildNr=0
[Unit2]
FileName=..\resource.h
CompileCpp=0
Folder=consolehead
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit3]
FileName=..\head.c
CompileCpp=0
Folder=consolehead
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit4]
FileName=..\head.h
CompileCpp=0
Folder=consolehead
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit5]
FileName=..\head.rc
Folder=consolehead
Compile=1
Link=0
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit6]
FileName=..\resid.h
CompileCpp=0
Folder=consolehead
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=

View File

@ -1,33 +0,0 @@
# Project: guihead
# Makefile created by Dev-C++ 4.9.9.2
CPP = g++.exe
CC = gcc.exe
WINDRES = windres.exe
RES =
OBJ = ../../head/guihead.o ../../head/head.o $(RES)
LINKOBJ = ../../head/guihead.o ../../head/head.o $(RES)
LIBS = -L"C:/Dev-Cpp/lib" -mwindows -n -s
INCS = -I"C:/Dev-Cpp/include"
CXXINCS = -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include"
BIN = guihead.exe
CXXFLAGS = $(CXXINCS) -fexpensive-optimizations -O3
CFLAGS = $(INCS) -fexpensive-optimizations -O3
RM = rm -f
.PHONY: all all-before all-after clean clean-custom
all: all-before guihead.exe all-after
clean: clean-custom
${RM} $(OBJ) $(BIN)
$(BIN): $(OBJ)
# $(CC) $(LINKOBJ) -o "guihead.exe" $(LIBS)
../../head/guihead.o: guihead.c
$(CC) -c guihead.c -o ../../head/guihead.o $(CFLAGS)
../../head/head.o: ../head.c
$(CC) -c ../head.c -o ../../head/head.o $(CFLAGS)

View File

@ -1,185 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
Sylvain Mina (single instance patch)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
Except as contained in this notice, the name(s) of the above copyright holders
shall not be used in advertising or otherwise to promote the sale, use or other
dealings in this Software without prior written authorization.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#include "../resource.h"
#include "../head.h"
#include "guihead.h"
extern FILE* hLog;
extern PROCESS_INFORMATION pi;
HWND hWnd;
DWORD dwExitCode = 0;
BOOL stayAlive = FALSE;
BOOL splash = FALSE;
BOOL splashTimeoutErr;
BOOL waitForWindow;
int splashTimeout = DEFAULT_SPLASH_TIMEOUT;
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow) {
int result = prepare(lpCmdLine);
if (result == ERROR_ALREADY_EXISTS) {
HWND handle = getInstanceWindow();
ShowWindow(handle, SW_SHOW);
SetForegroundWindow(handle);
closeLogFile();
return 2;
}
if (result != TRUE) {
signalError();
return 1;
}
splash = loadBool(SHOW_SPLASH)
&& strstr(lpCmdLine, "--l4j-no-splash") == NULL;
stayAlive = loadBool(GUI_HEADER_STAYS_ALIVE)
&& strstr(lpCmdLine, "--l4j-dont-wait") == NULL;
if (splash || stayAlive) {
hWnd = CreateWindowEx(WS_EX_TOOLWINDOW, "STATIC", "",
WS_POPUP | SS_BITMAP,
0, 0, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
if (splash) {
char timeout[10] = {0};
if (loadString(SPLASH_TIMEOUT, timeout)) {
splashTimeout = atoi(timeout);
if (splashTimeout <= 0 || splashTimeout > MAX_SPLASH_TIMEOUT) {
splashTimeout = DEFAULT_SPLASH_TIMEOUT;
}
}
splashTimeoutErr = loadBool(SPLASH_TIMEOUT_ERR)
&& strstr(lpCmdLine, "--l4j-no-splash-err") == NULL;
waitForWindow = loadBool(SPLASH_WAITS_FOR_WINDOW);
HANDLE hImage = LoadImage(hInstance, // handle of the instance containing the image
MAKEINTRESOURCE(SPLASH_BITMAP), // name or identifier of image
IMAGE_BITMAP, // type of image
0, // desired width
0, // desired height
LR_DEFAULTSIZE);
if (hImage == NULL) {
signalError();
return 1;
}
SendMessage(hWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hImage);
RECT rect;
GetWindowRect(hWnd, &rect);
int x = (GetSystemMetrics(SM_CXSCREEN) - (rect.right - rect.left)) / 2;
int y = (GetSystemMetrics(SM_CYSCREEN) - (rect.bottom - rect.top)) / 2;
SetWindowPos(hWnd, HWND_TOP, x, y, 0, 0, SWP_NOSIZE);
ShowWindow(hWnd, nCmdShow);
UpdateWindow (hWnd);
}
if (!SetTimer (hWnd, ID_TIMER, 1000 /* 1s */, TimerProc)) {
signalError();
return 1;
}
}
if (execute(FALSE) == -1) {
signalError();
return 1;
}
if (!(splash || stayAlive)) {
debug("Exit code:\t0\n");
closeHandles();
return 0;
}
MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
debug("Exit code:\t%d\n", dwExitCode);
closeHandles();
return dwExitCode;
}
HWND getInstanceWindow() {
char windowTitle[STR];
char instWindowTitle[STR] = {0};
if (loadString(INSTANCE_WINDOW_TITLE, instWindowTitle)) {
HWND handle = FindWindowEx(NULL, NULL, NULL, NULL);
while (handle != NULL) {
GetWindowText(handle, windowTitle, STR - 1);
if (strstr(windowTitle, instWindowTitle) != NULL) {
return handle;
} else {
handle = FindWindowEx(NULL, handle, NULL, NULL);
}
}
}
return NULL;
}
BOOL CALLBACK enumwndfn(HWND hwnd, LPARAM lParam) {
DWORD processId;
GetWindowThreadProcessId(hwnd, &processId);
if (pi.dwProcessId == processId) {
LONG styles = GetWindowLong(hwnd, GWL_STYLE);
if ((styles & WS_VISIBLE) != 0) {
splash = FALSE;
ShowWindow(hWnd, SW_HIDE);
return FALSE;
}
}
return TRUE;
}
VOID CALLBACK TimerProc(
HWND hwnd, // handle of window for timer messages
UINT uMsg, // WM_TIMER message
UINT idEvent, // timer identifier
DWORD dwTime) { // current system time
if (splash) {
if (splashTimeout == 0) {
splash = FALSE;
ShowWindow(hWnd, SW_HIDE);
if (waitForWindow && splashTimeoutErr) {
KillTimer(hwnd, ID_TIMER);
signalError();
PostQuitMessage(0);
}
} else {
splashTimeout--;
if (waitForWindow) {
EnumWindows(enumwndfn, 0);
}
}
}
GetExitCodeProcess(pi.hProcess, &dwExitCode);
if (dwExitCode != STILL_ACTIVE
|| !(splash || stayAlive)) {
KillTimer(hWnd, ID_TIMER);
PostQuitMessage(0);
}
}

View File

@ -1,109 +0,0 @@
[Project]
FileName=guihead.dev
Name=guihead
UnitCount=5
Type=0
Ver=1
ObjFiles=
Includes=
Libs=
PrivateResource=
ResourceIncludes=
MakeIncludes=
Compiler=
CppCompiler=
Linker=-n_@@_
IsCpp=0
Icon=
ExeOutput=
ObjectOutput=..\..\head
OverrideOutput=0
OverrideOutputName=guihead.exe
HostApplication=
Folders=
CommandLine=
UseCustomMakefile=1
CustomMakefile=Makefile.win
IncludeVersionInfo=0
SupportXPThemes=0
CompilerSet=0
CompilerSettings=0000000001001000000100
[Unit1]
FileName=guihead.c
CompileCpp=0
Folder=guihead
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=$(CC) -c guihead.c -o ../../head/guihead.o $(CFLAGS)
[Unit2]
FileName=guihead.h
CompileCpp=0
Folder=guihead
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[VersionInfo]
Major=0
Minor=1
Release=1
Build=1
LanguageID=1033
CharsetID=1252
CompanyName=
FileVersion=
FileDescription=Developed using the Dev-C++ IDE
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=
AutoIncBuildNr=0
[Unit4]
FileName=..\head.h
CompileCpp=0
Folder=guihead
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit6]
FileName=..\resid.h
CompileCpp=0
Folder=guihead
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit3]
FileName=..\head.c
CompileCpp=0
Folder=guihead
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit5]
FileName=..\resource.h
CompileCpp=0
Folder=guihead
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=

View File

@ -1,43 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
Except as contained in this notice, the name(s) of the above copyright holders
shall not be used in advertising or otherwise to promote the sale, use or other
dealings in this Software without prior written authorization.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#define ID_TIMER 1
#define DEFAULT_SPLASH_TIMEOUT 60 /* 60 seconds */
#define MAX_SPLASH_TIMEOUT 60 * 15 /* 15 minutes */
HWND getInstanceWindow();
BOOL CALLBACK enumwndfn(HWND hwnd, LPARAM lParam);
VOID CALLBACK TimerProc(
HWND hwnd, // handle of window for timer messages
UINT uMsg, // WM_TIMER message
UINT idEvent, // timer identifier
DWORD dwTime // current system time
);

View File

@ -1,807 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2008 Grzegorz Kowal,
Ian Roberts (jdk preference patch)
Sylvain Mina (single instance patch)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
Except as contained in this notice, the name(s) of the above copyright holders
shall not be used in advertising or otherwise to promote the sale, use or other
dealings in this Software without prior written authorization.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#include "resource.h"
#include "head.h"
HMODULE hModule;
FILE* hLog;
BOOL console = FALSE;
BOOL wow64 = FALSE;
int foundJava = NO_JAVA_FOUND;
struct _stat statBuf;
PROCESS_INFORMATION pi;
DWORD priority;
char mutexName[STR] = {0};
char errUrl[256] = {0};
char errTitle[STR] = "Launch4j";
char errMsg[BIG_STR] = {0};
char javaMinVer[STR] = {0};
char javaMaxVer[STR] = {0};
char foundJavaVer[STR] = {0};
char foundJavaKey[_MAX_PATH] = {0};
char oldPwd[_MAX_PATH] = {0};
char workingDir[_MAX_PATH] = {0};
char cmd[_MAX_PATH] = {0};
char args[MAX_ARGS] = {0};
FILE* openLogFile(const char* exePath, const int pathLen) {
char path[_MAX_PATH] = {0};
strncpy(path, exePath, pathLen);
strcat(path, "\\launch4j.log");
return fopen(path, "a");
}
void closeLogFile() {
if (hLog != NULL) {
fclose(hLog);
}
}
void setWow64Flag() {
LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(
GetModuleHandle(TEXT("kernel32")), "IsWow64Process");
if (fnIsWow64Process != NULL) {
fnIsWow64Process(GetCurrentProcess(), &wow64);
}
debug("WOW64:\t\t%s\n", wow64 ? "yes" : "no");
}
void setConsoleFlag() {
console = TRUE;
}
void msgBox(const char* text) {
if (console) {
printf("%s: %s\n", errTitle, text);
} else {
MessageBox(NULL, text, errTitle, MB_OK);
}
}
void signalError() {
DWORD err = GetLastError();
if (err) {
LPVOID lpMsgBuf;
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER
| FORMAT_MESSAGE_FROM_SYSTEM
| FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
err,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL);
debug("Error:\t\t%s\n", (LPCTSTR) lpMsgBuf);
strcat(errMsg, "\n\n");
strcat(errMsg, (LPCTSTR) lpMsgBuf);
msgBox(errMsg);
LocalFree(lpMsgBuf);
} else {
msgBox(errMsg);
}
if (*errUrl) {
debug("Open URL:\t%s\n", errUrl);
ShellExecute(NULL, "open", errUrl, NULL, NULL, SW_SHOWNORMAL);
}
closeLogFile();
}
BOOL loadString(const int resID, char* buffer) {
HRSRC hResource;
HGLOBAL hResourceLoaded;
LPBYTE lpBuffer;
hResource = FindResourceEx(hModule, RT_RCDATA, MAKEINTRESOURCE(resID),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT));
if (NULL != hResource) {
hResourceLoaded = LoadResource(hModule, hResource);
if (NULL != hResourceLoaded) {
lpBuffer = (LPBYTE) LockResource(hResourceLoaded);
if (NULL != lpBuffer) {
int x = 0;
do {
buffer[x] = (char) lpBuffer[x];
} while (buffer[x++] != 0);
// debug("Resource %d:\t%s\n", resID, buffer);
return TRUE;
}
}
} else {
SetLastError(0);
}
return FALSE;
}
BOOL loadBool(const int resID) {
char boolStr[20] = {0};
loadString(resID, boolStr);
return strcmp(boolStr, TRUE_STR) == 0;
}
int loadInt(const int resID) {
char intStr[20] = {0};
loadString(resID, intStr);
return atoi(intStr);
}
BOOL regQueryValue(const char* regPath, unsigned char* buffer,
unsigned long bufferLength) {
HKEY hRootKey;
char* key;
char* value;
if (strstr(regPath, HKEY_CLASSES_ROOT_STR) == regPath) {
hRootKey = HKEY_CLASSES_ROOT;
} else if (strstr(regPath, HKEY_CURRENT_USER_STR) == regPath) {
hRootKey = HKEY_CURRENT_USER;
} else if (strstr(regPath, HKEY_LOCAL_MACHINE_STR) == regPath) {
hRootKey = HKEY_LOCAL_MACHINE;
} else if (strstr(regPath, HKEY_USERS_STR) == regPath) {
hRootKey = HKEY_USERS;
} else if (strstr(regPath, HKEY_CURRENT_CONFIG_STR) == regPath) {
hRootKey = HKEY_CURRENT_CONFIG;
} else {
return FALSE;
}
key = strchr(regPath, '\\') + 1;
value = strrchr(regPath, '\\') + 1;
*(value - 1) = 0;
HKEY hKey;
unsigned long datatype;
BOOL result = FALSE;
if ((wow64 && RegOpenKeyEx(hRootKey,
key,
0,
KEY_READ | KEY_WOW64_64KEY,
&hKey) == ERROR_SUCCESS)
|| RegOpenKeyEx(hRootKey,
key,
0,
KEY_READ,
&hKey) == ERROR_SUCCESS) {
result = RegQueryValueEx(hKey, value, NULL, &datatype, buffer, &bufferLength)
== ERROR_SUCCESS;
RegCloseKey(hKey);
}
*(value - 1) = '\\';
return result;
}
void regSearch(const HKEY hKey, const char* keyName, const int searchType) {
DWORD x = 0;
unsigned long size = BIG_STR;
FILETIME time;
char buffer[BIG_STR] = {0};
while (RegEnumKeyEx(
hKey, // handle to key to enumerate
x++, // index of subkey to enumerate
buffer, // address of buffer for subkey name
&size, // address for size of subkey buffer
NULL, // reserved
NULL, // address of buffer for class string
NULL, // address for size of class buffer
&time) == ERROR_SUCCESS) {
if (strcmp(buffer, javaMinVer) >= 0
&& (!*javaMaxVer || strcmp(buffer, javaMaxVer) <= 0)
&& strcmp(buffer, foundJavaVer) > 0) {
strcpy(foundJavaVer, buffer);
strcpy(foundJavaKey, keyName);
appendPath(foundJavaKey, buffer);
foundJava = searchType;
debug("Match:\t\t%s\\%s\n", keyName, buffer);
} else {
debug("Ignore:\t\t%s\\%s\n", keyName, buffer);
}
size = BIG_STR;
}
}
void regSearchWow(const char* keyName, const int searchType) {
HKEY hKey;
debug("64-bit search:\t%s...\n", keyName);
if (wow64 && RegOpenKeyEx(HKEY_LOCAL_MACHINE,
keyName,
0,
KEY_READ | KEY_WOW64_64KEY,
&hKey) == ERROR_SUCCESS) {
regSearch(hKey, keyName, searchType | KEY_WOW64_64KEY);
RegCloseKey(hKey);
if ((foundJava & KEY_WOW64_64KEY) != NO_JAVA_FOUND)
{
debug("Using 64-bit runtime.\n");
return;
}
}
debug("32-bit search:\t%s...\n", keyName);
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
keyName,
0,
KEY_READ,
&hKey) == ERROR_SUCCESS) {
regSearch(hKey, keyName, searchType);
RegCloseKey(hKey);
}
}
void regSearchJreSdk(const char* jreKeyName, const char* sdkKeyName,
const int jdkPreference) {
if (jdkPreference == JDK_ONLY || jdkPreference == PREFER_JDK) {
regSearchWow(sdkKeyName, FOUND_SDK);
if (jdkPreference != JDK_ONLY) {
regSearchWow(jreKeyName, FOUND_JRE);
}
} else { // jdkPreference == JRE_ONLY or PREFER_JRE
regSearchWow(jreKeyName, FOUND_JRE);
if (jdkPreference != JRE_ONLY) {
regSearchWow(sdkKeyName, FOUND_SDK);
}
}
}
BOOL findJavaHome(char* path, const int jdkPreference) {
regSearchJreSdk("SOFTWARE\\JavaSoft\\Java Runtime Environment",
"SOFTWARE\\JavaSoft\\Java Development Kit",
jdkPreference);
if (foundJava == NO_JAVA_FOUND) {
regSearchJreSdk("SOFTWARE\\IBM\\Java2 Runtime Environment",
"SOFTWARE\\IBM\\Java Development Kit",
jdkPreference);
}
if (foundJava != NO_JAVA_FOUND) {
HKEY hKey;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
foundJavaKey,
0,
KEY_READ | (foundJava & KEY_WOW64_64KEY),
&hKey) == ERROR_SUCCESS) {
unsigned char buffer[BIG_STR] = {0};
unsigned long bufferlength = BIG_STR;
unsigned long datatype;
if (RegQueryValueEx(hKey, "JavaHome", NULL, &datatype, buffer,
&bufferlength) == ERROR_SUCCESS) {
int i = 0;
do {
path[i] = buffer[i];
} while (path[i++] != 0);
if (foundJava & FOUND_SDK) {
appendPath(path, "jre");
}
RegCloseKey(hKey);
return TRUE;
}
RegCloseKey(hKey);
}
}
return FALSE;
}
/*
* Extract the executable name, returns path length.
*/
int getExePath(char* exePath) {
if (GetModuleFileName(hModule, exePath, _MAX_PATH) == 0) {
return -1;
}
return strrchr(exePath, '\\') - exePath;
}
void appendPath(char* basepath, const char* path) {
if (basepath[strlen(basepath) - 1] != '\\') {
strcat(basepath, "\\");
}
strcat(basepath, path);
}
void appendJavaw(char* jrePath) {
if (console) {
appendPath(jrePath, "bin\\java.exe");
} else {
appendPath(jrePath, "bin\\javaw.exe");
}
}
void appendLauncher(const BOOL setProcName, char* exePath,
const int pathLen, char* cmd) {
if (setProcName) {
char tmpspec[_MAX_PATH];
char tmpfile[_MAX_PATH];
strcpy(tmpspec, cmd);
strcat(tmpspec, LAUNCH4J_TMP_DIR);
tmpspec[strlen(tmpspec) - 1] = 0;
if (_stat(tmpspec, &statBuf) == 0) {
// Remove temp launchers and manifests
struct _finddata_t c_file;
long hFile;
appendPath(tmpspec, "*.exe");
strcpy(tmpfile, cmd);
strcat(tmpfile, LAUNCH4J_TMP_DIR);
char* filename = tmpfile + strlen(tmpfile);
if ((hFile = _findfirst(tmpspec, &c_file)) != -1L) {
do {
strcpy(filename, c_file.name);
debug("Unlink:\t\t%s\n", tmpfile);
_unlink(tmpfile);
strcat(tmpfile, MANIFEST);
debug("Unlink:\t\t%s\n", tmpfile);
_unlink(tmpfile);
} while (_findnext(hFile, &c_file) == 0);
}
_findclose(hFile);
} else {
if (_mkdir(tmpspec) != 0) {
debug("Mkdir failed:\t%s\n", tmpspec);
appendJavaw(cmd);
return;
}
}
char javaw[_MAX_PATH];
strcpy(javaw, cmd);
appendJavaw(javaw);
strcpy(tmpfile, cmd);
strcat(tmpfile, LAUNCH4J_TMP_DIR);
char* tmpfilename = tmpfile + strlen(tmpfile);
char* exeFilePart = exePath + pathLen + 1;
// Copy manifest
char manifest[_MAX_PATH] = {0};
strcpy(manifest, exePath);
strcat(manifest, MANIFEST);
if (_stat(manifest, &statBuf) == 0) {
strcat(tmpfile, exeFilePart);
strcat(tmpfile, MANIFEST);
debug("Copy:\t\t%s -> %s\n", manifest, tmpfile);
CopyFile(manifest, tmpfile, FALSE);
}
// Copy launcher
strcpy(tmpfilename, exeFilePart);
debug("Copy:\t\t%s -> %s\n", javaw, tmpfile);
if (CopyFile(javaw, tmpfile, FALSE)) {
strcpy(cmd, tmpfile);
return;
} else if (_stat(javaw, &statBuf) == 0) {
long fs = statBuf.st_size;
if (_stat(tmpfile, &statBuf) == 0 && fs == statBuf.st_size) {
debug("Reusing:\t\t%s\n", tmpfile);
strcpy(cmd, tmpfile);
return;
}
}
}
appendJavaw(cmd);
}
void appendAppClasspath(char* dst, const char* src, const char* classpath) {
strcat(dst, src);
if (*classpath) {
strcat(dst, ";");
}
}
BOOL isJrePathOk(const char* path) {
char javaw[_MAX_PATH];
BOOL result = FALSE;
if (*path) {
strcpy(javaw, path);
appendJavaw(javaw);
result = _stat(javaw, &statBuf) == 0;
}
debug("Check launcher:\t%s %s\n", javaw, result ? "(OK)" : "(n/a)");
return result;
}
/*
* Expand environment %variables%
*/
BOOL expandVars(char *dst, const char *src, const char *exePath, const int pathLen) {
char varName[STR];
char varValue[MAX_VAR_SIZE];
while (strlen(src) > 0) {
char *start = strchr(src, '%');
if (start != NULL) {
char *end = strchr(start + 1, '%');
if (end == NULL) {
return FALSE;
}
// Copy content up to %VAR%
strncat(dst, src, start - src);
// Insert value of %VAR%
*varName = 0;
strncat(varName, start + 1, end - start - 1);
// Remember value start for logging
char *varValue = dst + strlen(dst);
if (strcmp(varName, "EXEDIR") == 0) {
strncat(dst, exePath, pathLen);
} else if (strcmp(varName, "EXEFILE") == 0) {
strcat(dst, exePath);
} else if (strcmp(varName, "PWD") == 0) {
GetCurrentDirectory(_MAX_PATH, dst + strlen(dst));
} else if (strcmp(varName, "OLDPWD") == 0) {
strcat(dst, oldPwd);
} else if (strstr(varName, HKEY_STR) == varName) {
regQueryValue(varName, dst + strlen(dst), BIG_STR);
} else if (GetEnvironmentVariable(varName, varValue, MAX_VAR_SIZE) > 0) {
strcat(dst, varValue);
}
debug("Substitute:\t%s = %s\n", varName, varValue);
src = end + 1;
} else {
// Copy remaining content
strcat(dst, src);
break;
}
}
return TRUE;
}
void appendHeapSizes(char *dst) {
MEMORYSTATUS m;
memset(&m, 0, sizeof(m));
GlobalMemoryStatus(&m);
appendHeapSize(dst, INITIAL_HEAP_SIZE, INITIAL_HEAP_PERCENT,
m.dwAvailPhys, "-Xms");
appendHeapSize(dst, MAX_HEAP_SIZE, MAX_HEAP_PERCENT,
m.dwAvailPhys, "-Xmx");
}
void appendHeapSize(char *dst, const int absID, const int percentID,
const DWORD freeMemory, const char *option) {
const int mb = 1048576; // 1 MB
int abs = loadInt(absID);
int percent = loadInt(percentID);
int free = (long long) freeMemory * percent / (100 * mb); // 100% * 1 MB
int size = free > abs ? free : abs;
if (size > 0) {
debug("Heap %s:\t%d MB / %d%%, Free: %d MB, Heap size: %d MB\n",
option, abs, percent, freeMemory / mb, size);
strcat(dst, option);
_itoa(size, dst + strlen(dst), 10); // 10 -- radix
strcat(dst, "m ");
}
}
int prepare(const char *lpCmdLine) {
char tmp[MAX_ARGS] = {0};
hModule = GetModuleHandle(NULL);
if (hModule == NULL) {
return FALSE;
}
// Get executable path
char exePath[_MAX_PATH] = {0};
int pathLen = getExePath(exePath);
if (pathLen == -1) {
return FALSE;
}
// Initialize logging
if (strstr(lpCmdLine, "--l4j-debug") != NULL) {
hLog = openLogFile(exePath, pathLen);
if (hLog == NULL) {
return FALSE;
}
debug("\n\nCmdLine:\t%s %s\n", exePath, lpCmdLine);
}
setWow64Flag();
// Set default error message, title and optional support web site url.
loadString(SUPPORT_URL, errUrl);
loadString(ERR_TITLE, errTitle);
if (!loadString(STARTUP_ERR, errMsg)) {
return FALSE;
}
// Single instance
loadString(MUTEX_NAME, mutexName);
if (*mutexName) {
SECURITY_ATTRIBUTES security;
security.nLength = sizeof(SECURITY_ATTRIBUTES);
security.bInheritHandle = TRUE;
security.lpSecurityDescriptor = NULL;
CreateMutexA(&security, FALSE, mutexName);
if (GetLastError() == ERROR_ALREADY_EXISTS) {
debug("Instance already exists.");
return ERROR_ALREADY_EXISTS;
}
}
// Working dir
char tmp_path[_MAX_PATH] = {0};
GetCurrentDirectory(_MAX_PATH, oldPwd);
if (loadString(CHDIR, tmp_path)) {
strncpy(workingDir, exePath, pathLen);
appendPath(workingDir, tmp_path);
_chdir(workingDir);
debug("Working dir:\t%s\n", workingDir);
}
// Use bundled jre or find java
if (loadString(JRE_PATH, tmp_path)) {
char jrePath[MAX_ARGS] = {0};
expandVars(jrePath, tmp_path, exePath, pathLen);
debug("Bundled JRE:\t%s\n", jrePath);
if (jrePath[0] == '\\' || jrePath[1] == ':') {
// Absolute
strcpy(cmd, jrePath);
} else {
// Relative
strncpy(cmd, exePath, pathLen);
appendPath(cmd, jrePath);
}
}
if (!isJrePathOk(cmd)) {
if (!loadString(JAVA_MIN_VER, javaMinVer)) {
loadString(BUNDLED_JRE_ERR, errMsg);
return FALSE;
}
loadString(JAVA_MAX_VER, javaMaxVer);
if (!findJavaHome(cmd, loadInt(JDK_PREFERENCE))) {
loadString(JRE_VERSION_ERR, errMsg);
strcat(errMsg, " ");
strcat(errMsg, javaMinVer);
if (*javaMaxVer) {
strcat(errMsg, " - ");
strcat(errMsg, javaMaxVer);
}
loadString(DOWNLOAD_URL, errUrl);
return FALSE;
}
if (!isJrePathOk(cmd)) {
loadString(LAUNCHER_ERR, errMsg);
return FALSE;
}
}
// Append a path to the Path environment variable
char jreBinPath[_MAX_PATH];
strcpy(jreBinPath, cmd);
strcat(jreBinPath, "\\bin");
if (!appendToPathVar(jreBinPath)) {
return FALSE;
}
// Set environment variables
char envVars[MAX_VAR_SIZE] = {0};
loadString(ENV_VARIABLES, envVars);
char *var = strtok(envVars, "\t");
while (var != NULL) {
char *varValue = strchr(var, '=');
*varValue++ = 0;
*tmp = 0;
expandVars(tmp, varValue, exePath, pathLen);
debug("Set var:\t%s = %s\n", var, tmp);
SetEnvironmentVariable(var, tmp);
var = strtok(NULL, "\t");
}
*tmp = 0;
// Process priority
priority = loadInt(PRIORITY_CLASS);
// Custom process name
const BOOL setProcName = loadBool(SET_PROC_NAME)
&& strstr(lpCmdLine, "--l4j-default-proc") == NULL;
const BOOL wrapper = loadBool(WRAPPER);
appendLauncher(setProcName, exePath, pathLen, cmd);
// Heap sizes
appendHeapSizes(args);
// JVM options
if (loadString(JVM_OPTIONS, tmp)) {
strcat(tmp, " ");
} else {
*tmp = 0;
}
/*
* Load additional JVM options from .l4j.ini file
* Options are separated by spaces or CRLF
* # starts an inline comment
*/
strncpy(tmp_path, exePath, strlen(exePath) - 3);
strcat(tmp_path, "l4j.ini");
long hFile;
if ((hFile = _open(tmp_path, _O_RDONLY)) != -1) {
const int jvmOptLen = strlen(tmp);
char* src = tmp + jvmOptLen;
char* dst = src;
const int len = _read(hFile, src, MAX_ARGS - jvmOptLen - BIG_STR);
BOOL copy = TRUE;
int i;
for (i = 0; i < len; i++, src++) {
if (*src == '#') {
copy = FALSE;
} else if (*src == 13 || *src == 10) {
copy = TRUE;
if (dst > tmp && *(dst - 1) != ' ') {
*dst++ = ' ';
}
} else if (copy) {
*dst++ = *src;
}
}
*dst = 0;
if (len > 0 && *(dst - 1) != ' ') {
strcat(tmp, " ");
}
_close(hFile);
}
// Expand environment %variables%
expandVars(args, tmp, exePath, pathLen);
// MainClass + Classpath or Jar
char mainClass[STR] = {0};
char jar[_MAX_PATH] = {0};
loadString(JAR, jar);
if (loadString(MAIN_CLASS, mainClass)) {
if (!loadString(CLASSPATH, tmp)) {
return FALSE;
}
char exp[MAX_ARGS] = {0};
expandVars(exp, tmp, exePath, pathLen);
strcat(args, "-classpath \"");
if (wrapper) {
appendAppClasspath(args, exePath, exp);
} else if (*jar) {
appendAppClasspath(args, jar, exp);
}
// Deal with wildcards or >> strcat(args, exp); <<
char* cp = strtok(exp, ";");
while(cp != NULL) {
debug("Add classpath:\t%s\n", cp);
if (strpbrk(cp, "*?") != NULL) {
int len = strrchr(cp, '\\') - cp + 1;
strncpy(tmp_path, cp, len);
char* filename = tmp_path + len;
*filename = 0;
struct _finddata_t c_file;
long hFile;
if ((hFile = _findfirst(cp, &c_file)) != -1L) {
do {
strcpy(filename, c_file.name);
strcat(args, tmp_path);
strcat(args, ";");
debug(" \" :\t%s\n", tmp_path);
} while (_findnext(hFile, &c_file) == 0);
}
_findclose(hFile);
} else {
strcat(args, cp);
strcat(args, ";");
}
cp = strtok(NULL, ";");
}
*(args + strlen(args) - 1) = 0;
strcat(args, "\" ");
strcat(args, mainClass);
} else if (wrapper) {
strcat(args, "-jar \"");
strcat(args, exePath);
strcat(args, "\"");
} else {
strcat(args, "-jar \"");
strncat(args, exePath, pathLen);
appendPath(args, jar);
strcat(args, "\"");
}
// Constant command line args
if (loadString(CMD_LINE, tmp)) {
strcat(args, " ");
strcat(args, tmp);
}
// Command line args
if (*lpCmdLine) {
strcpy(tmp, lpCmdLine);
char* dst;
while ((dst = strstr(tmp, "--l4j-")) != NULL) {
char* src = strchr(dst, ' ');
if (src == NULL || *(src + 1) == 0) {
*dst = 0;
} else {
strcpy(dst, src + 1);
}
}
if (*tmp) {
strcat(args, " ");
strcat(args, tmp);
}
}
debug("Launcher:\t%s\n", cmd);
debug("Launcher args:\t%s\n", args);
debug("Args length:\t%d/32768 chars\n", strlen(args));
return TRUE;
}
void closeHandles() {
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
closeLogFile();
}
/*
* Append a path to the Path environment variable
*/
BOOL appendToPathVar(const char* path) {
char chBuf[MAX_VAR_SIZE] = {0};
const int pathSize = GetEnvironmentVariable("Path", chBuf, MAX_VAR_SIZE);
if (MAX_VAR_SIZE - pathSize - 1 < strlen(path)) {
return FALSE;
}
strcat(chBuf, ";");
strcat(chBuf, path);
return SetEnvironmentVariable("Path", chBuf);
}
DWORD execute(const BOOL wait) {
STARTUPINFO si;
memset(&pi, 0, sizeof(pi));
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
DWORD dwExitCode = -1;
char cmdline[MAX_ARGS];
strcpy(cmdline, "\"");
strcat(cmdline, cmd);
strcat(cmdline, "\" ");
strcat(cmdline, args);
if (CreateProcess(NULL, cmdline, NULL, NULL,
TRUE, priority, NULL, NULL, &si, &pi)) {
if (wait) {
WaitForSingleObject(pi.hProcess, INFINITE);
GetExitCodeProcess(pi.hProcess, &dwExitCode);
debug("Exit code:\t%d\n", dwExitCode);
closeHandles();
} else {
dwExitCode = 0;
}
}
return dwExitCode;
}

View File

@ -1,113 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2008 Grzegorz Kowal,
Ian Roberts (jdk preference patch)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
Except as contained in this notice, the name(s) of the above copyright holders
shall not be used in advertising or otherwise to promote the sale, use or other
dealings in this Software without prior written authorization.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#ifndef _LAUNCH4J_HEAD__INCLUDED_
#define _LAUNCH4J_HEAD__INCLUDED_
#define WIN32_LEAN_AND_MEAN // VC - Exclude rarely-used stuff from Windows headers
// Windows Header Files:
#include <windows.h>
// C RunTime Header Files
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include <shellapi.h>
#include <direct.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <io.h>
#include <process.h>
#define NO_JAVA_FOUND 0
#define FOUND_JRE 1
#define FOUND_SDK 2
#define JRE_ONLY 0
#define PREFER_JRE 1
#define PREFER_JDK 2
#define JDK_ONLY 3
#define LAUNCH4J_TMP_DIR "\\launch4j-tmp\\"
#define MANIFEST ".manifest"
#define KEY_WOW64_64KEY 0x0100
#define HKEY_STR "HKEY"
#define HKEY_CLASSES_ROOT_STR "HKEY_CLASSES_ROOT"
#define HKEY_CURRENT_USER_STR "HKEY_CURRENT_USER"
#define HKEY_LOCAL_MACHINE_STR "HKEY_LOCAL_MACHINE"
#define HKEY_USERS_STR "HKEY_USERS"
#define HKEY_CURRENT_CONFIG_STR "HKEY_CURRENT_CONFIG"
#define STR 128
#define BIG_STR 1024
#define MAX_VAR_SIZE 32767
#define MAX_ARGS 32768
#define TRUE_STR "true"
#define FALSE_STR "false"
#define debug(args...) if (hLog != NULL) fprintf(hLog, ## args);
typedef void (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
FILE* openLogFile(const char* exePath, const int pathLen);
void closeLogFile();
void msgBox(const char* text);
void signalError();
BOOL loadString(const int resID, char* buffer);
BOOL loadBool(const int resID);
int loadInt(const int resID);
BOOL regQueryValue(const char* regPath, unsigned char* buffer,
unsigned long bufferLength);
void regSearch(const HKEY hKey, const char* keyName, const int searchType);
void regSearchWow(const char* keyName, const int searchType);
void regSearchJreSdk(const char* jreKeyName, const char* sdkKeyName,
const int jdkPreference);
BOOL findJavaHome(char* path, const int jdkPreference);
int getExePath(char* exePath);
void appendPath(char* basepath, const char* path);
void appendJavaw(char* jrePath);
void appendAppClasspath(char* dst, const char* src, const char* classpath);
BOOL isJrePathOk(const char* path);
BOOL expandVars(char *dst, const char *src, const char *exePath, const int pathLen);
void appendHeapSizes(char *dst);
void appendHeapSize(char *dst, const int absID, const int percentID,
const DWORD freeMemory, const char *option);
int prepare(const char *lpCmdLine);
void closeHandles();
BOOL appendToPathVar(const char* path);
DWORD execute(const BOOL wait);
#endif // _LAUNCH4J_HEAD__INCLUDED_

View File

@ -1,71 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2008 Grzegorz Kowal
Ian Roberts (jdk preference patch)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
Except as contained in this notice, the name(s) of the above copyright holders
shall not be used in advertising or otherwise to promote the sale, use or other
dealings in this Software without prior written authorization.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
// ICON
#define APP_ICON 1
// BITMAP
#define SPLASH_BITMAP 1
// RCDATA
#define JRE_PATH 1
#define JAVA_MIN_VER 2
#define JAVA_MAX_VER 3
#define SHOW_SPLASH 4
#define SPLASH_WAITS_FOR_WINDOW 5
#define SPLASH_TIMEOUT 6
#define SPLASH_TIMEOUT_ERR 7
#define CHDIR 8
#define SET_PROC_NAME 9
#define ERR_TITLE 10
#define GUI_HEADER_STAYS_ALIVE 11
#define JVM_OPTIONS 12
#define CMD_LINE 13
#define JAR 14
#define MAIN_CLASS 15
#define CLASSPATH 16
#define WRAPPER 17
#define JDK_PREFERENCE 18
#define ENV_VARIABLES 19
#define PRIORITY_CLASS 20
#define DOWNLOAD_URL 21
#define SUPPORT_URL 22
#define MUTEX_NAME 23
#define INSTANCE_WINDOW_TITLE 24
#define INITIAL_HEAP_SIZE 25
#define INITIAL_HEAP_PERCENT 26
#define MAX_HEAP_SIZE 27
#define MAX_HEAP_PERCENT 28
#define STARTUP_ERR 101
#define BUNDLED_JRE_ERR 102
#define JRE_VERSION_ERR 103
#define LAUNCHER_ERR 104
#define INSTANCE_ALREADY_EXISTS_MSG 105

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 883 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 912 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 805 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 883 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 513 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 906 B

View File

@ -1,2 +0,0 @@
versionNumber=3.0.1.0
version=3.0.1

View File

@ -1,207 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on 2005-04-24
*/
package net.sf.launch4j;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import net.sf.launch4j.binding.InvariantViolationException;
import net.sf.launch4j.config.Config;
import net.sf.launch4j.config.ConfigPersister;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class Builder {
private final Log _log;
private final File _basedir;
public Builder(Log log) {
_log = log;
_basedir = Util.getJarBasedir();
}
public Builder(Log log, File basedir) {
_log = log;
_basedir = basedir;
}
/**
* @return Output file path.
*/
public File build() throws BuilderException {
final Config c = ConfigPersister.getInstance().getConfig();
try {
c.validate();
} catch (InvariantViolationException e) {
throw new BuilderException(e.getMessage());
}
File rc = null;
File ro = null;
File outfile = null;
FileInputStream is = null;
FileOutputStream os = null;
final RcBuilder rcb = new RcBuilder();
try {
rc = rcb.build(c);
ro = Util.createTempFile("o");
outfile = ConfigPersister.getInstance().getOutputFile();
Cmd resCmd = new Cmd(_basedir);
resCmd.addExe("windres")
.add(Util.WINDOWS_OS ? "--preprocessor=type" : "--preprocessor=cat")
.add("-J rc -O coff -F pe-i386")
.addAbsFile(rc)
.addAbsFile(ro);
_log.append(Messages.getString("Builder.compiling.resources"));
resCmd.exec(_log);
Cmd ldCmd = new Cmd(_basedir);
ldCmd.addExe("ld")
.add("-mi386pe")
.add("--oformat pei-i386")
.add((c.getHeaderType().equals(Config.GUI_HEADER))
? "--subsystem windows" : "--subsystem console")
.add("-s") // strip symbols
.addFiles(c.getHeaderObjects())
.addAbsFile(ro)
.addFiles(c.getLibs())
.add("-o")
.addAbsFile(outfile);
_log.append(Messages.getString("Builder.linking"));
ldCmd.exec(_log);
if (!c.isDontWrapJar()) {
_log.append(Messages.getString("Builder.wrapping"));
int len;
byte[] buffer = new byte[1024];
is = new FileInputStream(Util.getAbsoluteFile(
ConfigPersister.getInstance().getConfigPath(), c.getJar()));
os = new FileOutputStream(outfile, true);
while ((len = is.read(buffer)) > 0) {
os.write(buffer, 0, len);
}
}
_log.append(Messages.getString("Builder.success") + outfile.getPath());
return outfile;
} catch (IOException e) {
Util.delete(outfile);
_log.append(e.getMessage());
throw new BuilderException(e);
} catch (ExecException e) {
Util.delete(outfile);
String msg = e.getMessage();
if (msg != null && msg.indexOf("windres") != -1) {
if (e.getErrLine() != -1) {
_log.append(Messages.getString("Builder.line.has.errors",
String.valueOf(e.getErrLine())));
_log.append(rcb.getLine(e.getErrLine()));
} else {
_log.append(Messages.getString("Builder.generated.resource.file"));
_log.append(rcb.getContent());
}
}
throw new BuilderException(e);
} finally {
Util.close(is);
Util.close(os);
Util.delete(rc);
Util.delete(ro);
}
}
}
class Cmd {
private final List _cmd = new ArrayList();
private final File _basedir;
private final File _bindir;
public Cmd(File basedir) {
_basedir = basedir;
String path = System.getProperty("launch4j.bindir");
if (path == null) {
_bindir = new File(basedir, "bin");
} else {
File bindir = new File(path);
_bindir = bindir.isAbsolute() ? bindir : new File(basedir, path);
}
}
public Cmd add(String s) {
StringTokenizer st = new StringTokenizer(s);
while (st.hasMoreTokens()) {
_cmd.add(st.nextToken());
}
return this;
}
public Cmd addAbsFile(File file) {
_cmd.add(file.getPath());
return this;
}
public Cmd addFile(String pathname) {
_cmd.add(new File(_basedir, pathname).getPath());
return this;
}
public Cmd addExe(String pathname) {
if (Util.WINDOWS_OS) {
pathname += ".exe";
}
_cmd.add(new File(_bindir, pathname).getPath());
return this;
}
public Cmd addFiles(List files) {
for (Iterator iter = files.iterator(); iter.hasNext();) {
addFile((String) iter.next());
}
return this;
}
public void exec(Log log) throws ExecException {
String[] cmd = (String[]) _cmd.toArray(new String[_cmd.size()]);
Util.exec(cmd, log);
}
}

View File

@ -1,52 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on May 13, 2005
*/
package net.sf.launch4j;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class BuilderException extends Exception {
public BuilderException() {}
public BuilderException(Throwable t) {
super(t);
}
public BuilderException(String msg) {
super(msg);
}
}

View File

@ -1,66 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on May 14, 2005
*/
package net.sf.launch4j;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class ExecException extends Exception {
private final int _errLine;
public ExecException(Throwable t, int errLine) {
super(t);
_errLine = errLine;
}
public ExecException(Throwable t) {
this(t, -1);
}
public ExecException(String msg, int errLine) {
super(msg);
_errLine = errLine;
}
public ExecException(String msg) {
this(msg, -1);
}
public int getErrLine() {
return _errLine;
}
}

View File

@ -1,76 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on 2004-01-15
*/
package net.sf.launch4j;
import java.io.File;
import javax.swing.filechooser.FileFilter;
/**
* @author Copyright (C) 2004 Grzegorz Kowal
*/
public class FileChooserFilter extends FileFilter {
String _description;
String[] _extensions;
public FileChooserFilter(String description, String extension) {
_description = description;
_extensions = new String[] {extension};
}
public FileChooserFilter(String description, String[] extensions) {
_description = description;
_extensions = extensions;
}
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
}
String ext = Util.getExtension(f);
for (int i = 0; i < _extensions.length; i++) {
if (ext.toLowerCase().equals(_extensions[i].toLowerCase())) {
return true;
}
}
return false;
}
public String getDescription() {
return _description;
}
}

View File

@ -1,105 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on May 12, 2005
*/
package net.sf.launch4j;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public abstract class Log {
private static final Log _consoleLog = new ConsoleLog();
private static final Log _antLog = new AntLog();
public abstract void clear();
public abstract void append(String line);
public static Log getConsoleLog() {
return _consoleLog;
}
public static Log getAntLog() {
return _antLog;
}
public static Log getSwingLog(JTextArea textArea) {
return new SwingLog(textArea);
}
}
class ConsoleLog extends Log {
public void clear() {
System.out.println("\n");
}
public void append(String line) {
System.out.println("launch4j: " + line);
}
}
class AntLog extends Log {
public void clear() {
System.out.println("\n");
}
public void append(String line) {
System.out.println(line);
}
}
class SwingLog extends Log {
private final JTextArea _textArea;
public SwingLog(JTextArea textArea) {
_textArea = textArea;
}
public void clear() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
_textArea.setText("");
}});
}
public void append(final String line) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
_textArea.append(line + "\n");
}});
}
}

View File

@ -1,99 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2008 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Apr 21, 2005
*/
package net.sf.launch4j;
import java.io.File;
import java.io.InputStream;
import java.util.Properties;
import net.sf.launch4j.config.ConfigPersister;
import net.sf.launch4j.formimpl.MainFrame;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class Main {
private static String _name;
private static String _description;
public static void main(String[] args) {
try {
Properties props = new Properties();
InputStream in = Main.class.getClassLoader()
.getResourceAsStream("launch4j.properties");
props.load(in);
in.close();
setDescription(props);
if (args.length == 0) {
ConfigPersister.getInstance().createBlank();
MainFrame.createInstance();
} else if (args.length == 1 && !args[0].startsWith("-")) {
ConfigPersister.getInstance().load(new File(args[0]));
Builder b = new Builder(Log.getConsoleLog());
b.build();
} else {
System.out.println(_description
+ Messages.getString("Main.usage")
+ ": launch4j config.xml");
}
} catch (Exception e) {
Log.getConsoleLog().append(e.getMessage());
}
}
public static String getName() {
return _name;
}
public static String getDescription() {
return _description;
}
private static void setDescription(Properties props) {
_name = "Launch4j " + props.getProperty("version");
_description = _name +
" (http://launch4j.sourceforge.net/)\n" +
"Cross-platform Java application wrapper" +
" for creating Windows native executables.\n\n" +
"Copyright (C) 2004, 2008 Grzegorz Kowal\n\n" +
"Launch4j comes with ABSOLUTELY NO WARRANTY.\n" +
"This is free software, licensed under the BSD License.\n" +
"This product includes software developed by the Apache Software Foundation" +
" (http://www.apache.org/).";
}
}

View File

@ -1,78 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.sf.launch4j;
import java.text.MessageFormat;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
public class Messages {
private static final String BUNDLE_NAME = "net.sf.launch4j.messages";
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
.getBundle(BUNDLE_NAME);
private static final MessageFormat FORMATTER = new MessageFormat("");
private Messages() {
}
public static String getString(String key) {
try {
return RESOURCE_BUNDLE.getString(key);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
public static String getString(String key, String arg0) {
return getString(key, new Object[] {arg0});
}
public static String getString(String key, String arg0, String arg1) {
return getString(key, new Object[] {arg0, arg1});
}
public static String getString(String key, String arg0, String arg1, String arg2) {
return getString(key, new Object[] {arg0, arg1, arg2});
}
public static String getString(String key, Object[] args) {
try {
FORMATTER.applyPattern(RESOURCE_BUNDLE.getString(key));
return FORMATTER.format(args);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
}

View File

@ -1,71 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on 2005-04-24
*/
package net.sf.launch4j;
//import net.sf.launch4j.config.Config;
//import org.apache.commons.cli.CommandLine;
//import org.apache.commons.cli.CommandLineParser;
//import org.apache.commons.cli.HelpFormatter;
//import org.apache.commons.cli.Options;
//import org.apache.commons.cli.ParseException;
//import org.apache.commons.cli.PosixParser;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class OptionParser {
// private final Options _options;
//
// public OptionParser() {
// _options = new Options();
// _options.addOption("h", "header", true, "header");
// }
//
// public Config parse(Config c, String[] args) throws ParseException {
// CommandLineParser parser = new PosixParser();
// CommandLine cl = parser.parse(_options, args);
// c.setJar(getFile(props, Config.JAR));
// c.setOutfile(getFile(props, Config.OUTFILE));
// }
//
// public void printHelp() {
// HelpFormatter formatter = new HelpFormatter();
// formatter.printHelp("launch4j", _options);
// }
}

View File

@ -1,340 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on 2005-04-24
*/
package net.sf.launch4j;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import net.sf.launch4j.config.Config;
import net.sf.launch4j.config.ConfigPersister;
import net.sf.launch4j.config.Jre;
import net.sf.launch4j.config.Msg;
import net.sf.launch4j.config.Splash;
import net.sf.launch4j.config.VersionInfo;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class RcBuilder {
// winnt.h
public static final int LANG_NEUTRAL = 0;
public static final int SUBLANG_NEUTRAL = 0;
public static final int SUBLANG_DEFAULT = 1;
public static final int SUBLANG_SYS_DEFAULT = 2;
// MANIFEST
public static final int MANIFEST = 1;
// ICON
public static final int APP_ICON = 1;
// BITMAP
public static final int SPLASH_BITMAP = 1;
// RCDATA
public static final int JRE_PATH = 1;
public static final int JAVA_MIN_VER = 2;
public static final int JAVA_MAX_VER = 3;
public static final int SHOW_SPLASH = 4;
public static final int SPLASH_WAITS_FOR_WINDOW = 5;
public static final int SPLASH_TIMEOUT = 6;
public static final int SPLASH_TIMEOUT_ERR = 7;
public static final int CHDIR = 8;
public static final int SET_PROC_NAME = 9;
public static final int ERR_TITLE = 10;
public static final int GUI_HEADER_STAYS_ALIVE = 11;
public static final int JVM_OPTIONS = 12;
public static final int CMD_LINE = 13;
public static final int JAR = 14;
public static final int MAIN_CLASS = 15;
public static final int CLASSPATH = 16;
public static final int WRAPPER = 17;
public static final int JDK_PREFERENCE = 18;
public static final int ENV_VARIABLES = 19;
public static final int PRIORITY_CLASS = 20;
public static final int DOWNLOAD_URL = 21;
public static final int SUPPORT_URL = 22;
public static final int MUTEX_NAME = 23;
public static final int INSTANCE_WINDOW_TITLE = 24;
public static final int INITIAL_HEAP_SIZE = 25;
public static final int INITIAL_HEAP_PERCENT = 26;
public static final int MAX_HEAP_SIZE = 27;
public static final int MAX_HEAP_PERCENT = 28;
public static final int STARTUP_ERR = 101;
public static final int BUNDLED_JRE_ERR = 102;
public static final int JRE_VERSION_ERR = 103;
public static final int LAUNCHER_ERR = 104;
public static final int INSTANCE_ALREADY_EXISTS_MSG = 105;
private final StringBuffer _sb = new StringBuffer();
public String getContent() {
return _sb.toString();
}
public String getLine(int line) {
return _sb.toString().split("\n")[line - 1];
}
public File build(Config c) throws IOException {
_sb.append("LANGUAGE ");
_sb.append(LANG_NEUTRAL);
_sb.append(", ");
_sb.append(SUBLANG_DEFAULT);
_sb.append('\n');
addVersionInfo(c.getVersionInfo());
addJre(c.getJre());
addManifest(MANIFEST, c.getManifest());
addIcon(APP_ICON, c.getIcon());
addText(ERR_TITLE, c.getErrTitle());
addText(DOWNLOAD_URL, c.getDownloadUrl());
addText(SUPPORT_URL, c.getSupportUrl());
addText(CMD_LINE, c.getCmdLine());
addWindowsPath(CHDIR, c.getChdir());
addText(PRIORITY_CLASS, String.valueOf(c.getPriorityClass()));
addTrue(SET_PROC_NAME, c.isCustomProcName());
addTrue(GUI_HEADER_STAYS_ALIVE, c.isStayAlive());
addSplash(c.getSplash());
addMessages(c);
if (c.getSingleInstance() != null) {
addText(MUTEX_NAME, c.getSingleInstance().getMutexName());
addText(INSTANCE_WINDOW_TITLE, c.getSingleInstance().getWindowTitle());
}
if (c.getVariables() != null && !c.getVariables().isEmpty()) {
StringBuffer vars = new StringBuffer();
append(vars, c.getVariables(), "\t");
addText(ENV_VARIABLES, vars.toString());
}
// MAIN_CLASS / JAR
addTrue(WRAPPER, !c.isDontWrapJar());
if (c.getClassPath() != null) {
addText(MAIN_CLASS, c.getClassPath().getMainClass());
addWindowsPath(CLASSPATH, c.getClassPath().getPathsString());
}
if (c.isDontWrapJar() && c.getJar() != null) {
addWindowsPath(JAR, c.getJar().getPath());
}
File f = Util.createTempFile("rc");
BufferedWriter w = new BufferedWriter(new FileWriter(f));
w.write(_sb.toString());
w.close();
return f;
}
private void addVersionInfo(VersionInfo v) {
if (v == null) {
return;
}
_sb.append("1 VERSIONINFO\n");
_sb.append("FILEVERSION ");
_sb.append(v.getFileVersion().replaceAll("\\.", ", "));
_sb.append("\nPRODUCTVERSION ");
_sb.append(v.getProductVersion().replaceAll("\\.", ", "));
_sb.append("\nFILEFLAGSMASK 0\n" +
"FILEOS 0x40000\n" +
"FILETYPE 1\n" +
"{\n" +
" BLOCK \"StringFileInfo\"\n" +
" {\n" +
" BLOCK \"040904E4\"\n" + // English
" {\n");
addVerBlockValue("CompanyName", v.getCompanyName());
addVerBlockValue("FileDescription", v.getFileDescription());
addVerBlockValue("FileVersion", v.getTxtFileVersion());
addVerBlockValue("InternalName", v.getInternalName());
addVerBlockValue("LegalCopyright", v.getCopyright());
addVerBlockValue("OriginalFilename", v.getOriginalFilename());
addVerBlockValue("ProductName", v.getProductName());
addVerBlockValue("ProductVersion", v.getTxtProductVersion());
_sb.append(" }\n }\nBLOCK \"VarFileInfo\"\n{\nVALUE \"Translation\", 0x0409, 0x04E4\n}\n}");
}
private void addJre(Jre jre) {
addWindowsPath(JRE_PATH, jre.getPath());
addText(JAVA_MIN_VER, jre.getMinVersion());
addText(JAVA_MAX_VER, jre.getMaxVersion());
addText(JDK_PREFERENCE, String.valueOf(jre.getJdkPreferenceIndex()));
addInteger(INITIAL_HEAP_SIZE, jre.getInitialHeapSize());
addInteger(INITIAL_HEAP_PERCENT, jre.getInitialHeapPercent());
addInteger(MAX_HEAP_SIZE, jre.getMaxHeapSize());
addInteger(MAX_HEAP_PERCENT, jre.getMaxHeapPercent());
StringBuffer options = new StringBuffer();
if (jre.getOptions() != null && !jre.getOptions().isEmpty()) {
addSpace(options);
append(options, jre.getOptions(), " ");
}
addText(JVM_OPTIONS, options.toString());
}
private void addSplash(Splash splash) {
if (splash == null) {
return;
}
addTrue(SHOW_SPLASH, true);
addTrue(SPLASH_WAITS_FOR_WINDOW, splash.getWaitForWindow());
addText(SPLASH_TIMEOUT, String.valueOf(splash.getTimeout()));
addTrue(SPLASH_TIMEOUT_ERR, splash.isTimeoutErr());
addBitmap(SPLASH_BITMAP, splash.getFile());
}
private void addMessages(Config c) {
Msg msg = c.getMessages();
if (msg == null) {
msg = new Msg();
}
addText(STARTUP_ERR, msg.getStartupErr());
addText(BUNDLED_JRE_ERR, msg.getBundledJreErr());
addText(JRE_VERSION_ERR, msg.getJreVersionErr());
addText(LAUNCHER_ERR, msg.getLauncherErr());
if (c.getSingleInstance() != null) {
addText(INSTANCE_ALREADY_EXISTS_MSG, msg.getInstanceAlreadyExistsMsg());
}
}
private void append(StringBuffer sb, List list, String separator) {
for (int i = 0; i < list.size(); i++) {
sb.append(list.get(i));
if (i < list.size() - 1) {
sb.append(separator);
}
}
}
private void addText(int id, String text) {
if (text == null || text.equals("")) {
return;
}
_sb.append(id);
_sb.append(" RCDATA BEGIN \"");
_sb.append(escape(text));
_sb.append("\\0\" END\n");
}
private void addTrue(int id, boolean value) {
if (value) {
addText(id, "true");
}
}
private void addInteger(int id, Integer value) {
if (value != null) {
addText(id, value.toString());
}
}
/**
* Stores path in Windows format with '\' separators.
*/
private void addWindowsPath(int id, String path) {
if (path == null || path.equals("")) {
return;
}
_sb.append(id);
_sb.append(" RCDATA BEGIN \"");
_sb.append(path.replaceAll("\\\\", "\\\\\\\\")
.replaceAll("/", "\\\\\\\\"));
_sb.append("\\0\" END\n");
}
private void addManifest(int id, File manifest) {
if (manifest == null || manifest.getPath().equals("")) {
return;
}
_sb.append(id);
_sb.append(" 24 \"");
_sb.append(getPath(Util.getAbsoluteFile(
ConfigPersister.getInstance().getConfigPath(), manifest)));
_sb.append("\"\n");
}
private void addIcon(int id, File icon) {
if (icon == null || icon.getPath().equals("")) {
return;
}
_sb.append(id);
_sb.append(" ICON DISCARDABLE \"");
_sb.append(getPath(Util.getAbsoluteFile(
ConfigPersister.getInstance().getConfigPath(), icon)));
_sb.append("\"\n");
}
private void addBitmap(int id, File bitmap) {
if (bitmap == null) {
return;
}
_sb.append(id);
_sb.append(" BITMAP \"");
_sb.append(getPath(Util.getAbsoluteFile(
ConfigPersister.getInstance().getConfigPath(), bitmap)));
_sb.append("\"\n");
}
private String getPath(File f) {
return f.getPath().replaceAll("\\\\", "\\\\\\\\");
}
private void addSpace(StringBuffer sb) {
int len = sb.length();
if (len-- > 0 && sb.charAt(len) != ' ') {
sb.append(' ');
}
}
private void addVerBlockValue(String key, String value) {
_sb.append(" VALUE \"");
_sb.append(key);
_sb.append("\", \"");
if (value != null) {
_sb.append(escape(value));
}
_sb.append("\"\n");
}
private String escape(String text) {
return text.replaceAll("\"", "\"\"");
}
}

View File

@ -1,197 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on 2005-04-24
*/
package net.sf.launch4j;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class Util {
public static final boolean WINDOWS_OS = System.getProperty("os.name")
.toLowerCase().startsWith("windows");
private Util() {}
public static File createTempFile(String suffix) throws IOException {
String tmpdir = System.getProperty("launch4j.tmpdir");
if (tmpdir != null) {
if (tmpdir.indexOf(' ') != -1) {
throw new IOException(Messages.getString("Util.tmpdir"));
}
return File.createTempFile("launch4j", suffix, new File(tmpdir));
} else {
return File.createTempFile("launch4j", suffix);
}
}
/**
* Returns the base directory of a jar file or null if the class is a standalone file.
* @return System specific path
*
* Based on a patch submitted by Josh Elsasser
*/
public static File getJarBasedir() {
String url = Util.class.getClassLoader()
.getResource(Util.class.getName().replace('.', '/') + ".class")
.getFile()
.replaceAll("%20", " ");
if (url.startsWith("file:")) {
String jar = url.substring(5, url.lastIndexOf('!'));
int x = jar.lastIndexOf('/');
if (x == -1) {
x = jar.lastIndexOf('\\');
}
String basedir = jar.substring(0, x + 1);
return new File(basedir);
} else {
return new File(".");
}
}
public static File getAbsoluteFile(File basepath, File f) {
return f.isAbsolute() ? f : new File(basepath, f.getPath());
}
public static String getExtension(File f) {
String name = f.getName();
int x = name.lastIndexOf('.');
if (x != -1) {
return name.substring(x);
} else {
return "";
}
}
public static void exec(String[] cmd, Log log) throws ExecException {
BufferedReader is = null;
try {
if (WINDOWS_OS) {
for (int i = 0; i < cmd.length; i++) {
cmd[i] = cmd[i].replaceAll("/", "\\\\");
}
}
Process p = Runtime.getRuntime().exec(cmd);
is = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line;
int errLine = -1;
Pattern pattern = Pattern.compile(":\\d+:");
while ((line = is.readLine()) != null) {
log.append(line);
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
errLine = Integer.valueOf(
line.substring(matcher.start() + 1, matcher.end() - 1))
.intValue();
if (line.matches("(?i).*unrecognized escape sequence")) {
log.append(Messages.getString("Util.use.double.backslash"));
}
break;
}
}
is.close();
p.waitFor();
if (errLine != -1) {
throw new ExecException(Messages.getString("Util.exec.failed")
+ ": " + cmd, errLine);
}
if (p.exitValue() != 0) {
throw new ExecException(Messages.getString("Util.exec.failed")
+ "(" + p.exitValue() + "): " + cmd);
}
} catch (IOException e) {
close(is);
throw new ExecException(e);
} catch (InterruptedException e) {
close(is);
throw new ExecException(e);
}
}
public static void close(final InputStream o) {
if (o != null) {
try {
o.close();
} catch (IOException e) {
System.err.println(e); // XXX log
}
}
}
public static void close(final OutputStream o) {
if (o != null) {
try {
o.close();
} catch (IOException e) {
System.err.println(e); // XXX log
}
}
}
public static void close(final Reader o) {
if (o != null) {
try {
o.close();
} catch (IOException e) {
System.err.println(e); // XXX log
}
}
}
public static void close(final Writer o) {
if (o != null) {
try {
o.close();
} catch (IOException e) {
System.err.println(e); // XXX log
}
}
}
public static boolean delete(File f) {
return (f != null) ? f.delete() : false;
}
}

View File

@ -1,61 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Jul 19, 2006
*/
package net.sf.launch4j.ant;
import java.util.ArrayList;
import java.util.List;
import net.sf.launch4j.config.ClassPath;
/**
* @author Copyright (C) 2006 Grzegorz Kowal
*/
public class AntClassPath extends ClassPath {
private final List wrappedPaths = new ArrayList();
public void setCp(String cp){
wrappedPaths.add(cp);
}
public void addCp(StringWrapper cp) {
wrappedPaths.add(cp);
}
public void unwrap() {
setPaths(StringWrapper.unwrap(wrappedPaths));
}
}

View File

@ -1,129 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on May 24, 2005
*/
package net.sf.launch4j.ant;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.tools.ant.BuildException;
import net.sf.launch4j.config.Config;
import net.sf.launch4j.config.Msg;
import net.sf.launch4j.config.SingleInstance;
import net.sf.launch4j.config.Splash;
import net.sf.launch4j.config.VersionInfo;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class AntConfig extends Config {
private final List wrappedHeaderObjects = new ArrayList();
private final List wrappedLibs = new ArrayList();
private final List wrappedVariables = new ArrayList();
public void setJarPath(String path) {
setJar(new File(path));
}
public void addObj(StringWrapper obj) {
wrappedHeaderObjects.add(obj);
}
public void addLib(StringWrapper lib) {
wrappedLibs.add(lib);
}
public void addVar(StringWrapper var) {
wrappedVariables.add(var);
}
// __________________________________________________________________________________
public void addSingleInstance(SingleInstance singleInstance) {
checkNull(getSingleInstance(), "singleInstance");
setSingleInstance(singleInstance);
}
public void addClassPath(AntClassPath classPath) {
checkNull(getClassPath(), "classPath");
setClassPath(classPath);
}
public void addJre(AntJre jre) {
checkNull(getJre(), "jre");
setJre(jre);
}
public void addSplash(Splash splash) {
checkNull(getSplash(), "splash");
setSplash(splash);
}
public void addVersionInfo(VersionInfo versionInfo) {
checkNull(getVersionInfo(), "versionInfo");
setVersionInfo(versionInfo);
}
public void addMessages(Msg messages) {
checkNull(getMessages(), "messages");
setMessages(messages);
}
// __________________________________________________________________________________
public void unwrap() {
setHeaderObjects(StringWrapper.unwrap(wrappedHeaderObjects));
setLibs(StringWrapper.unwrap(wrappedLibs));
setVariables(StringWrapper.unwrap(wrappedVariables));
if (getClassPath() != null) {
((AntClassPath) getClassPath()).unwrap();
}
if (getJre() != null) {
((AntJre) getJre()).unwrap();
}
}
private void checkNull(Object o, String name) {
if (o != null) {
throw new BuildException(
Messages.getString("AntConfig.duplicate.element")
+ ": "
+ name);
}
}
}

View File

@ -1,69 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Jul 18, 2006
*/
package net.sf.launch4j.ant;
import java.util.ArrayList;
import java.util.List;
import net.sf.launch4j.config.Jre;
/**
* @author Copyright (C) 2006 Grzegorz Kowal
*/
public class AntJre extends Jre {
private final List wrappedOptions = new ArrayList();
public void addOpt(StringWrapper opt) {
wrappedOptions.add(opt);
}
public void unwrap() {
setOptions(StringWrapper.unwrap(wrappedOptions));
}
/**
* For backwards compatibility.
*/
public void setDontUsePrivateJres(boolean dontUse) {
if (dontUse) {
setJdkPreference(JDK_PREFERENCE_JRE_ONLY);
}
else {
setJdkPreference(JDK_PREFERENCE_PREFER_JRE);
}
}
}

View File

@ -1,162 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on May 24, 2005
*/
package net.sf.launch4j.ant;
import java.io.File;
import net.sf.launch4j.Builder;
import net.sf.launch4j.BuilderException;
import net.sf.launch4j.Log;
import net.sf.launch4j.config.Config;
import net.sf.launch4j.config.ConfigPersister;
import net.sf.launch4j.config.ConfigPersisterException;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class Launch4jTask extends Task {
private File _configFile;
private AntConfig _config;
// System properties
private File tmpdir; // launch4j.tmpdir
private File bindir; // launch4j.bindir
// Override configFile settings
private File jar;
private File outfile;
private String fileVersion;
private String txtFileVersion;
private String productVersion;
private String txtProductVersion;
public void execute() throws BuildException {
try {
if (tmpdir != null) {
System.setProperty("launch4j.tmpdir", tmpdir.getPath());
}
if (bindir != null) {
System.setProperty("launch4j.bindir", bindir.getPath());
}
if (_configFile != null && _config != null) {
throw new BuildException(
Messages.getString("Launch4jTask.specify.config"));
} else if (_configFile != null) {
ConfigPersister.getInstance().load(_configFile);
Config c = ConfigPersister.getInstance().getConfig();
if (jar != null) {
c.setJar(jar);
}
if (outfile != null) {
c.setOutfile(outfile);
}
if (fileVersion != null) {
c.getVersionInfo().setFileVersion(fileVersion);
}
if (txtFileVersion != null) {
c.getVersionInfo().setTxtFileVersion(txtFileVersion);
}
if (productVersion != null) {
c.getVersionInfo().setProductVersion(productVersion);
}
if (txtProductVersion != null) {
c.getVersionInfo().setTxtProductVersion(txtProductVersion);
}
} else if (_config != null) {
_config.unwrap();
ConfigPersister.getInstance().setAntConfig(_config,
getProject().getBaseDir());
} else {
throw new BuildException(
Messages.getString("Launch4jTask.specify.config"));
}
final Builder b = new Builder(Log.getAntLog());
b.build();
} catch (ConfigPersisterException e) {
throw new BuildException(e);
} catch (BuilderException e) {
throw new BuildException(e);
}
}
public void setConfigFile(File configFile) {
_configFile = configFile;
}
public void addConfig(AntConfig config) {
_config = config;
}
public void setBindir(File bindir) {
this.bindir = bindir;
}
public void setTmpdir(File tmpdir) {
this.tmpdir = tmpdir;
}
public void setFileVersion(String fileVersion) {
this.fileVersion = fileVersion;
}
public void setJar(File jar) {
this.jar = jar;
}
public void setJarPath(String path) {
this.jar = new File(path);
}
public void setOutfile(File outfile) {
this.outfile = outfile;
}
public void setProductVersion(String productVersion) {
this.productVersion = productVersion;
}
public void setTxtFileVersion(String txtFileVersion) {
this.txtFileVersion = txtFileVersion;
}
public void setTxtProductVersion(String txtProductVersion) {
this.txtProductVersion = txtProductVersion;
}
}

View File

@ -1,55 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.sf.launch4j.ant;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
public class Messages {
private static final String BUNDLE_NAME = "net.sf.launch4j.ant.messages";
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
.getBundle(BUNDLE_NAME);
private Messages() {
}
public static String getString(String key) {
try {
return RESOURCE_BUNDLE.getString(key);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
}

View File

@ -1,67 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Jul 18, 2006
*/
package net.sf.launch4j.ant;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* @author Copyright (C) 2006 Grzegorz Kowal
*/
public class StringWrapper {
private String text;
public static List unwrap(List wrappers) {
if (wrappers.isEmpty()) {
return null;
}
List strings = new ArrayList(wrappers.size());
for (Iterator iter = wrappers.iterator(); iter.hasNext();) {
strings.add(iter.next().toString());
}
return strings;
}
public void addText(String text) {
this.text = text;
}
public String toString() {
return text;
}
}

View File

@ -1,35 +0,0 @@
#
# Launch4j (http://launch4j.sourceforge.net/)
# Cross-platform Java application wrapper for creating Windows native executables.
#
# Copyright (c) 2004, 2007 Grzegorz Kowal
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Launch4j nor the names of its contributors
# may be used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
Launch4jTask.specify.config=Specify configFile or config
AntConfig.duplicate.element=Duplicate element

View File

@ -1,35 +0,0 @@
#
# Launch4j (http://launch4j.sourceforge.net/)
# Cross-platform Java application wrapper for creating Windows native executables.
#
# Copyright (c) 2004, 2007 Grzegorz Kowal, Patricio Mart<72>nez Ros
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Launch4j nor the names of its contributors
# may be used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
Launch4jTask.specify.config=Specify configFile or config
AntConfig.duplicate.element=Duplicate element

View File

@ -1,62 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Apr 30, 2005
*/
package net.sf.launch4j.binding;
import java.awt.Color;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public interface Binding {
/** Used to mark components with invalid data. */
public final static Color INVALID_COLOR = Color.PINK;
/** Java Bean property bound to a component */
public String getProperty();
/** Clear component, set it to the default value */
public void clear(IValidatable bean);
/** Java Bean property -> Component */
public void put(IValidatable bean);
/** Component -> Java Bean property */
public void get(IValidatable bean);
/** Mark component as valid */
public void markValid();
/** Mark component as invalid */
public void markInvalid();
/** Enable or disable the component */
public void setEnabled(boolean enabled);
}

View File

@ -1,52 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Apr 30, 2005
*/
package net.sf.launch4j.binding;
/**
* Signals a runtime error, a missing property in a Java Bean for example.
*
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class BindingException extends RuntimeException {
public BindingException(Throwable t) {
super(t);
}
public BindingException(String msg) {
super(msg);
}
}

View File

@ -1,317 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Apr 30, 2005
*/
package net.sf.launch4j.binding;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JList;
import javax.swing.JRadioButton;
import javax.swing.JTextArea;
import javax.swing.JToggleButton;
import javax.swing.text.JTextComponent;
import org.apache.commons.beanutils.PropertyUtils;
/**
* Creates and handles bindings.
*
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class Bindings implements PropertyChangeListener {
private final Map _bindings = new HashMap();
private final Map _optComponents = new HashMap();
private boolean _modified = false;
/**
* Used to track component modifications.
*/
public void propertyChange(PropertyChangeEvent evt) {
String prop = evt.getPropertyName();
if ("AccessibleValue".equals(prop)
|| "AccessibleText".equals(prop)
|| "AccessibleVisibleData".equals(prop)) {
_modified = true;
}
}
/**
* Any of the components modified?
*/
public boolean isModified() {
return _modified;
}
public Binding getBinding(String property) {
return (Binding) _bindings.get(property);
}
private void registerPropertyChangeListener(JComponent c) {
c.getAccessibleContext().addPropertyChangeListener(this);
}
private void registerPropertyChangeListener(JComponent[] cs) {
for (int i = 0; i < cs.length; i++) {
cs[i].getAccessibleContext().addPropertyChangeListener(this);
}
}
private boolean isPropertyNull(IValidatable bean, Binding b) {
try {
for (Iterator iter = _optComponents.keySet().iterator(); iter.hasNext();) {
String property = (String) iter.next();
if (b.getProperty().startsWith(property)) {
return PropertyUtils.getProperty(bean, property) == null;
}
}
return false;
} catch (Exception e) {
throw new BindingException(e);
}
}
/**
* Enables or disables all components bound to properties that begin with given prefix.
*/
public void setComponentsEnabled(String prefix, boolean enabled) {
for (Iterator iter = _bindings.values().iterator(); iter.hasNext();) {
Binding b = (Binding) iter.next();
if (b.getProperty().startsWith(prefix)) {
b.setEnabled(enabled);
}
}
}
/**
* Clear all components, set them to their default values.
* Clears the _modified flag.
*/
public void clear(IValidatable bean) {
for (Iterator iter = _optComponents.values().iterator(); iter.hasNext();) {
((Binding) iter.next()).clear(bean);
}
for (Iterator iter = _bindings.values().iterator(); iter.hasNext();) {
((Binding) iter.next()).clear(bean);
}
_modified = false;
}
/**
* Copies data from the Java Bean to the UI components.
* Clears the _modified flag.
*/
public void put(IValidatable bean) {
for (Iterator iter = _optComponents.values().iterator(); iter.hasNext();) {
((Binding) iter.next()).put(bean);
}
for (Iterator iter = _bindings.values().iterator(); iter.hasNext();) {
Binding b = (Binding) iter.next();
if (isPropertyNull(bean, b)) {
b.clear(null);
} else {
b.put(bean);
}
}
_modified = false;
}
/**
* Copies data from UI components to the Java Bean and checks it's class invariants.
* Clears the _modified flag.
* @throws InvariantViolationException
* @throws BindingException
*/
public void get(IValidatable bean) {
try {
for (Iterator iter = _optComponents.values().iterator(); iter.hasNext();) {
((Binding) iter.next()).get(bean);
}
for (Iterator iter = _bindings.values().iterator(); iter.hasNext();) {
Binding b = (Binding) iter.next();
if (!isPropertyNull(bean, b)) {
b.get(bean);
}
}
bean.checkInvariants();
for (Iterator iter = _optComponents.keySet().iterator(); iter.hasNext();) {
String property = (String) iter.next();
IValidatable component = (IValidatable) PropertyUtils.getProperty(bean,
property);
if (component != null) {
component.checkInvariants();
}
}
_modified = false; // XXX
} catch (InvariantViolationException e) {
e.setBinding(getBinding(e.getProperty()));
throw e;
} catch (Exception e) {
throw new BindingException(e);
}
}
private Bindings add(Binding b) {
if (_bindings.containsKey(b.getProperty())) {
throw new BindingException(Messages.getString("Bindings.duplicate.binding"));
}
_bindings.put(b.getProperty(), b);
return this;
}
/**
* Add an optional (nullable) Java Bean component of type clazz.
*/
public Bindings addOptComponent(String property, Class clazz, JToggleButton c,
boolean enabledByDefault) {
Binding b = new OptComponentBinding(this, property, clazz, c, enabledByDefault);
if (_optComponents.containsKey(property)) {
throw new BindingException(Messages.getString("Bindings.duplicate.binding"));
}
_optComponents.put(property, b);
return this;
}
/**
* Add an optional (nullable) Java Bean component of type clazz.
*/
public Bindings addOptComponent(String property, Class clazz, JToggleButton c) {
return addOptComponent(property, clazz, c, false);
}
/**
* Handles JEditorPane, JTextArea, JTextField
*/
public Bindings add(String property, JTextComponent c, String defaultValue) {
registerPropertyChangeListener(c);
return add(new JTextComponentBinding(property, c, defaultValue));
}
/**
* Handles JEditorPane, JTextArea, JTextField
*/
public Bindings add(String property, JTextComponent c) {
registerPropertyChangeListener(c);
return add(new JTextComponentBinding(property, c, ""));
}
/**
* Handles JToggleButton, JCheckBox
*/
public Bindings add(String property, JToggleButton c, boolean defaultValue) {
registerPropertyChangeListener(c);
return add(new JToggleButtonBinding(property, c, defaultValue));
}
/**
* Handles JToggleButton, JCheckBox
*/
public Bindings add(String property, JToggleButton c) {
registerPropertyChangeListener(c);
return add(new JToggleButtonBinding(property, c, false));
}
/**
* Handles JRadioButton
*/
public Bindings add(String property, JRadioButton[] cs, int defaultValue) {
registerPropertyChangeListener(cs);
return add(new JRadioButtonBinding(property, cs, defaultValue));
}
/**
* Handles JRadioButton
*/
public Bindings add(String property, JRadioButton[] cs) {
registerPropertyChangeListener(cs);
return add(new JRadioButtonBinding(property, cs, 0));
}
/**
* Handles JTextArea
*/
public Bindings add(String property, JTextArea textArea, String defaultValue) {
registerPropertyChangeListener(textArea);
return add(new JTextComponentBinding(property, textArea, defaultValue));
}
/**
* Handles JTextArea lists
*/
public Bindings add(String property, JTextArea textArea) {
registerPropertyChangeListener(textArea);
return add(new JTextAreaBinding(property, textArea));
}
/**
* Handles Optional JTextArea lists
*/
public Bindings add(String property, String stateProperty,
JToggleButton button, JTextArea textArea) {
registerPropertyChangeListener(button);
registerPropertyChangeListener(textArea);
return add(new OptJTextAreaBinding(property, stateProperty, button, textArea));
}
/**
* Handles JList
*/
public Bindings add(String property, JList list) {
registerPropertyChangeListener(list);
return add(new JListBinding(property, list));
}
/**
* Handles JComboBox
*/
public Bindings add(String property, JComboBox combo, int defaultValue) {
registerPropertyChangeListener(combo);
return add(new JComboBoxBinding(property, combo, defaultValue));
}
/**
* Handles JComboBox
*/
public Bindings add(String property, JComboBox combo) {
registerPropertyChangeListener(combo);
return add(new JComboBoxBinding(property, combo, 0));
}
}

View File

@ -1,44 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on 2004-01-30
*/
package net.sf.launch4j.binding;
/**
* @author Copyright (C) 2004 Grzegorz Kowal
*/
public interface IValidatable {
public void checkInvariants();
}

View File

@ -1,67 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Jun 23, 2003
*/
package net.sf.launch4j.binding;
/**
* @author Copyright (C) 2003 Grzegorz Kowal
*/
public class InvariantViolationException extends RuntimeException {
private final String _property;
private Binding _binding;
public InvariantViolationException(String msg) {
super(msg);
_property = null;
}
public InvariantViolationException(String property, String msg) {
super(msg);
_property = property;
}
public String getProperty() {
return _property;
}
public Binding getBinding() {
return _binding;
}
public void setBinding(Binding binding) {
_binding = binding;
}
}

View File

@ -1,119 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2007 Ian Roberts
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on May 10, 2005
*/
package net.sf.launch4j.binding;
import java.awt.Color;
import javax.swing.JComboBox;
import org.apache.commons.beanutils.PropertyUtils;
/**
* @author Copyright (C) 2007 Ian Roberts
*/
public class JComboBoxBinding implements Binding {
private final String _property;
private final JComboBox _combo;
private final int _defaultValue;
private final Color _validColor;
public JComboBoxBinding(String property, JComboBox combo, int defaultValue) {
if (property == null || combo == null) {
throw new NullPointerException();
}
if (property.equals("")
|| combo.getItemCount() == 0
|| defaultValue < 0 || defaultValue >= combo.getItemCount()) {
throw new IllegalArgumentException();
}
_property = property;
_combo = combo;
_defaultValue = defaultValue;
_validColor = combo.getBackground();
}
public String getProperty() {
return _property;
}
public void clear(IValidatable bean) {
select(_defaultValue);
}
public void put(IValidatable bean) {
try {
Integer i = (Integer) PropertyUtils.getProperty(bean, _property);
if (i == null) {
throw new BindingException(
Messages.getString("JComboBoxBinding.property.null"));
}
select(i.intValue());
} catch (Exception e) {
throw new BindingException(e);
}
}
public void get(IValidatable bean) {
try {
PropertyUtils.setProperty(bean, _property, new Integer(_combo.getSelectedIndex()));
return;
} catch (Exception e) {
throw new BindingException(e);
}
}
private void select(int index) {
if (index < 0 || index >= _combo.getItemCount()) {
throw new BindingException(
Messages.getString("JComboBoxBinding.index.out.of.bounds"));
}
_combo.setSelectedIndex(index);
}
public void markValid() {
_combo.setBackground(_validColor);
_combo.requestFocusInWindow();
}
public void markInvalid() {
_combo.setBackground(Binding.INVALID_COLOR);
}
public void setEnabled(boolean enabled) {
_combo.setEnabled(enabled);
}
}

View File

@ -1,118 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on May 1, 2006
*/
package net.sf.launch4j.binding;
import java.awt.Color;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import org.apache.commons.beanutils.PropertyUtils;
/**
* @author Copyright (C) 2006 Grzegorz Kowal
*/
public class JListBinding implements Binding {
private final String _property;
private final JList _list;
private final Color _validColor;
public JListBinding(String property, JList list) {
if (property == null || list == null) {
throw new NullPointerException();
}
if (property.equals("")) {
throw new IllegalArgumentException();
}
_property = property;
_list = list;
_validColor = _list.getBackground();
}
public String getProperty() {
return _property;
}
public void clear(IValidatable bean) {
_list.setModel(new DefaultListModel());
}
public void put(IValidatable bean) {
try {
DefaultListModel model = new DefaultListModel();
List list = (List) PropertyUtils.getProperty(bean, _property);
if (list != null) {
for (Iterator iter = list.iterator(); iter.hasNext();) {
model.addElement(iter.next());
}
}
_list.setModel(model);
} catch (Exception e) {
throw new BindingException(e);
}
}
public void get(IValidatable bean) {
try {
DefaultListModel model = (DefaultListModel) _list.getModel();
final int size = model.getSize();
List list = new ArrayList(size);
for (int i = 0; i < size; i++) {
list.add(model.get(i));
}
PropertyUtils.setProperty(bean, _property, list);
} catch (Exception e) {
throw new BindingException(e);
}
}
public void markValid() {
_list.setBackground(_validColor);
_list.requestFocusInWindow();
}
public void markInvalid() {
_list.setBackground(Binding.INVALID_COLOR);
}
public void setEnabled(boolean enabled) {
_list.setEnabled(enabled);
}
}

View File

@ -1,146 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on May 10, 2005
*/
package net.sf.launch4j.binding;
import java.awt.Color;
import javax.swing.JRadioButton;
import org.apache.commons.beanutils.PropertyUtils;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class JRadioButtonBinding implements Binding {
private final String _property;
private final JRadioButton[] _buttons;
private final int _defaultValue;
private final Color _validColor;
public JRadioButtonBinding(String property, JRadioButton[] buttons, int defaultValue) {
if (property == null || buttons == null) {
throw new NullPointerException();
}
for (int i = 0; i < buttons.length; i++) {
if (buttons[i] == null) {
throw new NullPointerException();
}
}
if (property.equals("")
|| buttons.length == 0
|| defaultValue < 0 || defaultValue >= buttons.length) {
throw new IllegalArgumentException();
}
_property = property;
_buttons = buttons;
_defaultValue = defaultValue;
_validColor = buttons[0].getBackground();
}
public String getProperty() {
return _property;
}
public void clear(IValidatable bean) {
select(_defaultValue);
}
public void put(IValidatable bean) {
try {
Integer i = (Integer) PropertyUtils.getProperty(bean, _property);
if (i == null) {
throw new BindingException(
Messages.getString("JRadioButtonBinding.property.null"));
}
select(i.intValue());
} catch (Exception e) {
throw new BindingException(e);
}
}
public void get(IValidatable bean) {
try {
for (int i = 0; i < _buttons.length; i++) {
if (_buttons[i].isSelected()) {
PropertyUtils.setProperty(bean, _property, new Integer(i));
return;
}
}
throw new BindingException(
Messages.getString("JRadioButtonBinding.nothing.selected"));
} catch (Exception e) {
throw new BindingException(e);
}
}
private void select(int index) {
if (index < 0 || index >= _buttons.length) {
throw new BindingException(
Messages.getString("JRadioButtonBinding.index.out.of.bounds"));
}
_buttons[index].setSelected(true);
}
public void markValid() {
for (int i = 0; i < _buttons.length; i++) {
if (_buttons[i].isSelected()) {
_buttons[i].setBackground(_validColor);
_buttons[i].requestFocusInWindow();
return;
}
}
throw new BindingException(
Messages.getString("JRadioButtonBinding.nothing.selected"));
}
public void markInvalid() {
for (int i = 0; i < _buttons.length; i++) {
if (_buttons[i].isSelected()) {
_buttons[i].setBackground(Binding.INVALID_COLOR);
return;
}
}
throw new BindingException(
Messages.getString("JRadioButtonBinding.nothing.selected"));
}
public void setEnabled(boolean enabled) {
for (int i = 0; i < _buttons.length; i++) {
_buttons[i].setEnabled(enabled);
}
}
}

View File

@ -1,123 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Jun 14, 2006
*/
package net.sf.launch4j.binding;
import java.awt.Color;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JTextArea;
import org.apache.commons.beanutils.PropertyUtils;
/**
* @author Copyright (C) 2006 Grzegorz Kowal
*/
public class JTextAreaBinding implements Binding {
private final String _property;
private final JTextArea _textArea;
private final Color _validColor;
public JTextAreaBinding(String property, JTextArea textArea) {
if (property == null || textArea == null) {
throw new NullPointerException();
}
if (property.equals("")) {
throw new IllegalArgumentException();
}
_property = property;
_textArea = textArea;
_validColor = _textArea.getBackground();
}
public String getProperty() {
return _property;
}
public void clear(IValidatable bean) {
put(bean);
}
public void put(IValidatable bean) {
try {
List list = (List) PropertyUtils.getProperty(bean, _property);
StringBuffer sb = new StringBuffer();
if (list != null) {
for (int i = 0; i < list.size(); i++) {
sb.append(list.get(i));
if (i < list.size() - 1) {
sb.append("\n");
}
}
}
_textArea.setText(sb.toString());
} catch (Exception e) {
throw new BindingException(e);
}
}
public void get(IValidatable bean) {
try {
String text = _textArea.getText();
if (!text.equals("")) {
String[] items = text.split("\n");
List list = new ArrayList();
for (int i = 0; i < items.length; i++) {
list.add(items[i]);
}
PropertyUtils.setProperty(bean, _property, list);
} else {
PropertyUtils.setProperty(bean, _property, null);
}
} catch (Exception e) {
throw new BindingException(e);
}
}
public void markValid() {
_textArea.setBackground(_validColor);
_textArea.requestFocusInWindow();
}
public void markInvalid() {
_textArea.setBackground(Binding.INVALID_COLOR);
}
public void setEnabled(boolean enabled) {
_textArea.setEnabled(enabled);
}
}

View File

@ -1,108 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Apr 30, 2005
*/
package net.sf.launch4j.binding;
import java.awt.Color;
import javax.swing.text.JTextComponent;
import org.apache.commons.beanutils.BeanUtils;
/**
* Handles JEditorPane, JTextArea, JTextField
*
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class JTextComponentBinding implements Binding {
private final String _property;
private final JTextComponent _textComponent;
private final String _defaultValue;
private final Color _validColor;
public JTextComponentBinding(String property, JTextComponent textComponent,
String defaultValue) {
if (property == null || textComponent == null || defaultValue == null) {
throw new NullPointerException();
}
if (property.equals("")) {
throw new IllegalArgumentException();
}
_property = property;
_textComponent = textComponent;
_defaultValue = defaultValue;
_validColor = _textComponent.getBackground();
}
public String getProperty() {
return _property;
}
public void clear(IValidatable bean) {
_textComponent.setText(_defaultValue);
}
public void put(IValidatable bean) {
try {
String s = BeanUtils.getProperty(bean, _property);
// XXX displays zeros as blank
_textComponent.setText(s != null && !s.equals("0") ? s : "");
} catch (Exception e) {
throw new BindingException(e);
}
}
public void get(IValidatable bean) {
try {
BeanUtils.setProperty(bean, _property, _textComponent.getText());
} catch (Exception e) {
throw new BindingException(e);
}
}
public void markValid() {
_textComponent.setBackground(_validColor);
_textComponent.requestFocusInWindow();
}
public void markInvalid() {
_textComponent.setBackground(Binding.INVALID_COLOR);
}
public void setEnabled(boolean enabled) {
_textComponent.setEnabled(enabled);
}
}

View File

@ -1,108 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Apr 30, 2005
*/
package net.sf.launch4j.binding;
import java.awt.Color;
import javax.swing.JToggleButton;
import org.apache.commons.beanutils.PropertyUtils;
/**
* Handles JToggleButton, JCheckBox
*
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class JToggleButtonBinding implements Binding {
private final String _property;
private final JToggleButton _button;
private final boolean _defaultValue;
private final Color _validColor;
public JToggleButtonBinding(String property, JToggleButton button,
boolean defaultValue) {
if (property == null || button == null) {
throw new NullPointerException();
}
if (property.equals("")) {
throw new IllegalArgumentException();
}
_property = property;
_button = button;
_defaultValue = defaultValue;
_validColor = _button.getBackground();
}
public String getProperty() {
return _property;
}
public void clear(IValidatable bean) {
_button.setSelected(_defaultValue);
}
public void put(IValidatable bean) {
try {
Boolean b = (Boolean) PropertyUtils.getProperty(bean, _property);
_button.setSelected(b != null && b.booleanValue());
} catch (Exception e) {
throw new BindingException(e);
}
}
public void get(IValidatable bean) {
try {
PropertyUtils.setProperty(bean, _property,
Boolean.valueOf(_button.isSelected()));
} catch (Exception e) {
throw new BindingException(e);
}
}
public void markValid() {
_button.setBackground(_validColor);
_button.requestFocusInWindow();
}
public void markInvalid() {
_button.setBackground(Binding.INVALID_COLOR);
}
public void setEnabled(boolean enabled) {
_button.setEnabled(enabled);
}
}

View File

@ -1,78 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.sf.launch4j.binding;
import java.text.MessageFormat;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
public class Messages {
private static final String BUNDLE_NAME = "net.sf.launch4j.binding.messages";
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
.getBundle(BUNDLE_NAME);
private static final MessageFormat FORMATTER = new MessageFormat("");
private Messages() {
}
public static String getString(String key) {
try {
return RESOURCE_BUNDLE.getString(key);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
public static String getString(String key, String arg0) {
return getString(key, new Object[] {arg0});
}
public static String getString(String key, String arg0, String arg1) {
return getString(key, new Object[] {arg0, arg1});
}
public static String getString(String key, String arg0, String arg1, String arg2) {
return getString(key, new Object[] {arg0, arg1, arg2});
}
public static String getString(String key, Object[] args) {
try {
FORMATTER.applyPattern(RESOURCE_BUNDLE.getString(key));
return FORMATTER.format(args);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
}

View File

@ -1,119 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on May 11, 2005
*/
package net.sf.launch4j.binding;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import javax.swing.JToggleButton;
import org.apache.commons.beanutils.PropertyUtils;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class OptComponentBinding implements Binding, ActionListener {
private final Bindings _bindings;
private final String _property;
private final Class _clazz;
private final JToggleButton _button;
private final boolean _enabledByDefault;
public OptComponentBinding(Bindings bindings, String property, Class clazz,
JToggleButton button, boolean enabledByDefault) {
if (property == null || clazz == null || button == null) {
throw new NullPointerException();
}
if (property.equals("")) {
throw new IllegalArgumentException();
}
if (!Arrays.asList(clazz.getInterfaces()).contains(IValidatable.class)) {
throw new IllegalArgumentException(
Messages.getString("OptComponentBinding.must.implement")
+ IValidatable.class);
}
_bindings = bindings;
_property = property;
_clazz = clazz;
_button = button;
_button.addActionListener(this);
_enabledByDefault = enabledByDefault;
}
public String getProperty() {
return _property;
}
public void clear(IValidatable bean) {
_button.setSelected(_enabledByDefault);
updateComponents();
}
public void put(IValidatable bean) {
try {
Object component = PropertyUtils.getProperty(bean, _property);
_button.setSelected(component != null);
updateComponents();
} catch (Exception e) {
throw new BindingException(e);
}
}
public void get(IValidatable bean) {
try {
PropertyUtils.setProperty(bean, _property, _button.isSelected()
? _clazz.newInstance() : null);
} catch (Exception e) {
throw new BindingException(e);
}
}
public void markValid() {}
public void markInvalid() {}
public void setEnabled(boolean enabled) {} // XXX implement?
public void actionPerformed(ActionEvent e) {
updateComponents();
}
private void updateComponents() {
_bindings.setComponentsEnabled(_property, _button.isSelected());
}
}

View File

@ -1,141 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Sep 3, 2005
*/
package net.sf.launch4j.binding;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JTextArea;
import javax.swing.JToggleButton;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class OptJTextAreaBinding implements Binding, ActionListener {
private final String _property;
private final String _stateProperty;
private final JToggleButton _button;
private final JTextArea _textArea;
private final Color _validColor;
public OptJTextAreaBinding(String property, String stateProperty,
JToggleButton button, JTextArea textArea) {
if (property == null || button == null || textArea == null) {
throw new NullPointerException();
}
if (property.equals("")) {
throw new IllegalArgumentException();
}
_property = property;
_stateProperty = stateProperty;
_button = button;
_textArea = textArea;
_validColor = _textArea.getBackground();
button.addActionListener(this);
}
public String getProperty() {
return _property;
}
public void clear(IValidatable bean) {
put(bean);
}
public void put(IValidatable bean) {
try {
boolean selected = "true".equals(BeanUtils.getProperty(bean,
_stateProperty));
_button.setSelected(selected);
_textArea.setEnabled(selected);
List list = (List) PropertyUtils.getProperty(bean, _property);
StringBuffer sb = new StringBuffer();
if (list != null) {
for (int i = 0; i < list.size(); i++) {
sb.append(list.get(i));
if (i < list.size() - 1) {
sb.append("\n");
}
}
}
_textArea.setText(sb.toString());
} catch (Exception e) {
throw new BindingException(e);
}
}
public void get(IValidatable bean) {
try {
String text = _textArea.getText();
if (_button.isSelected() && !text.equals("")) {
String[] items = text.split("\n");
List list = new ArrayList();
for (int i = 0; i < items.length; i++) {
list.add(items[i]);
}
PropertyUtils.setProperty(bean, _property, list);
} else {
PropertyUtils.setProperty(bean, _property, null);
}
} catch (Exception e) {
throw new BindingException(e);
}
}
public void markValid() {
_textArea.setBackground(_validColor);
_textArea.requestFocusInWindow();
}
public void markInvalid() {
_textArea.setBackground(Binding.INVALID_COLOR);
}
public void setEnabled(boolean enabled) {
_textArea.setEnabled(enabled);
}
public void actionPerformed(ActionEvent e) {
_textArea.setEnabled(_button.isSelected());
}
}

View File

@ -1,259 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on 2004-01-30
*/
package net.sf.launch4j.binding;
import java.io.File;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import net.sf.launch4j.Util;
import net.sf.launch4j.config.ConfigPersister;
/**
* @author Copyright (C) 2004 Grzegorz Kowal
*/
public class Validator {
public static final String ALPHANUMERIC_PATTERN = "[\\w]*?";
public static final String ALPHA_PATTERN = "[\\w&&\\D]*?";
public static final String NUMERIC_PATTERN = "[\\d]*?";
public static final String PATH_PATTERN = "[\\w|[ .,:\\-/\\\\]]*?";
public static final int MAX_STR = 128;
public static final int MAX_PATH = 260;
public static final int MAX_BIG_STR = 8192; // or 16384;
public static final int MAX_ARGS = 32767 - 2048;
private Validator() {}
public static boolean isEmpty(String s) {
return s == null || s.equals("");
}
public static void checkNotNull(Object o, String property, String name) {
if (o == null) {
signalViolation(property,
Messages.getString("Validator.empty.field", name));
}
}
public static void checkString(String s, int maxLength, String property,
String name) {
if (s == null || s.length() == 0) {
signalViolation(property,
Messages.getString("Validator.empty.field", name));
}
if (s.length() > maxLength) {
signalLengthViolation(property, name, maxLength);
}
}
public static void checkOptStrings(List strings, int maxLength, int totalMaxLength,
String property, String name) {
if (strings == null) {
return;
}
int totalLength = 0;
for (Iterator iter = strings.iterator(); iter.hasNext();) {
String s = (String) iter.next();
checkString(s, maxLength, property, name);
totalLength += s.length();
if (totalLength > totalMaxLength) {
signalLengthViolation(property, name, totalMaxLength);
}
}
}
public static void checkString(String s, int maxLength, String pattern,
String property, String name) {
checkString(s, maxLength, property, name);
if (!s.matches(pattern)) {
signalViolation(property,
Messages.getString("Validator.invalid.data", name));
}
}
public static void checkOptStrings(List strings, int maxLength, int totalMaxLength,
String pattern, String property, String name, String msg) {
if (strings == null) {
return;
}
int totalLength = 0;
for (Iterator iter = strings.iterator(); iter.hasNext();) {
String s = (String) iter.next();
checkString(s, maxLength, property, name);
if (!s.matches(pattern)) {
signalViolation(property, msg != null
? msg
: Messages.getString("Validator.invalid.data", name));
}
totalLength += s.length();
if (totalLength > totalMaxLength) {
signalLengthViolation(property, name, totalMaxLength);
}
}
}
public static void checkOptString(String s, int maxLength, String property,
String name) {
if (s == null || s.length() == 0) {
return;
}
if (s.length() > maxLength) {
signalLengthViolation(property, name, maxLength);
}
}
public static void checkOptString(String s, int maxLength, String pattern,
String property, String name) {
if (s == null || s.length() == 0) {
return;
}
if (s.length() > maxLength) {
signalLengthViolation(property, name, maxLength);
}
if (!s.matches(pattern)) {
signalViolation(property,
Messages.getString("Validator.invalid.data", name));
}
}
public static void checkRange(int value, int min, int max,
String property, String name) {
if (value < min || value > max) {
signalViolation(property,
Messages.getString("Validator.must.be.in.range", name,
String.valueOf(min), String.valueOf(max)));
}
}
public static void checkRange(char value, char min, char max,
String property, String name) {
if (value < min || value > max) {
signalViolation(property, Messages.getString("Validator.must.be.in.range",
name, String.valueOf(min), String.valueOf(max)));
}
}
public static void checkMin(int value, int min, String property, String name) {
if (value < min) {
signalViolation(property,
Messages.getString("Validator.must.be.at.least", name,
String.valueOf(min)));
}
}
public static void checkIn(String s, String[] strings, String property,
String name) {
if (isEmpty(s)) {
signalViolation(property,
Messages.getString("Validator.empty.field", name));
}
List list = Arrays.asList(strings);
if (!list.contains(s)) {
signalViolation(property,
Messages.getString("Validator.invalid.option", name, list.toString()));
}
}
public static void checkTrue(boolean condition, String property, String msg) {
if (!condition) {
signalViolation(property, msg);
}
}
public static void checkFalse(boolean condition, String property, String msg) {
if (condition) {
signalViolation(property, msg);
}
}
public static void checkElementsNotNullUnique(Collection c, String property,
String msg) {
if (c.contains(null)
|| new HashSet(c).size() != c.size()) {
signalViolation(property,
Messages.getString("Validator.already.exists", msg));
}
}
public static void checkElementsUnique(Collection c, String property, String msg) {
if (new HashSet(c).size() != c.size()) {
signalViolation(property,
Messages.getString("Validator.already.exists", msg));
}
}
public static void checkFile(File f, String property, String fileDescription) {
File cfgPath = ConfigPersister.getInstance().getConfigPath();
if (f == null
|| f.getPath().equals("")
|| (!f.exists() && !Util.getAbsoluteFile(cfgPath, f).exists())) {
signalViolation(property,
Messages.getString("Validator.doesnt.exist", fileDescription));
}
}
public static void checkOptFile(File f, String property, String fileDescription) {
if (f != null && f.getPath().length() > 0) {
checkFile(f, property, fileDescription);
}
}
public static void checkRelativeWinPath(String path, String property, String msg) {
if (path == null
|| path.equals("")
|| path.startsWith("/")
|| path.startsWith("\\")
|| path.indexOf(':') != -1) {
signalViolation(property, msg);
}
}
public static void signalLengthViolation(String property, String name,
int maxLength) {
signalViolation(property,
Messages.getString("Validator.exceeds.max.length", name,
String.valueOf(maxLength)));
}
public static void signalViolation(String property, String msg) {
throw new InvariantViolationException(property, msg);
}
}

View File

@ -1,52 +0,0 @@
#
# Launch4j (http://launch4j.sourceforge.net/)
# Cross-platform Java application wrapper for creating Windows native executables.
#
# Copyright (c) 2004, 2007 Grzegorz Kowal
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Launch4j nor the names of its contributors
# may be used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
OptComponentBinding.must.implement=Optional component must implement
Validator.empty.field=Enter: {0}
Validator.invalid.data=Invalid data: {0}
Validator.must.be.in.range={0} must be in range [{1}-{2}]
Validator.must.be.at.least={0} must be at least
Validator.already.exists={0} already exists.
Validator.doesnt.exist={0} doesn''t exist.
Validator.exceeds.max.length={0} exceeds the maximum length of {1} characters.
Validator.invalid.option={0} must be one of [{1}]
Bindings.duplicate.binding=Duplicate binding
JRadioButtonBinding.property.null=Property is null
JRadioButtonBinding.nothing.selected=Nothing selected
JRadioButtonBinding.index.out.of.bounds=Button index out of bounds
JComboBoxBinding.property.null=Property is null
JComboBoxBinding.index.out.of.bounds=Combo box index out of bounds

View File

@ -1,51 +0,0 @@
#
# Launch4j (http://launch4j.sourceforge.net/)
# Cross-platform Java application wrapper for creating Windows native executables.
#
# Copyright (c) 2004, 2007 Grzegorz Kowal, Patricio Mart<72>nez Ros
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Launch4j nor the names of its contributors
# may be used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
OptComponentBinding.must.implement=El componente opcional debe ser implementado
Validator.empty.field=Introduzca: {0}
Validator.invalid.data=Dato no v<>lido: {0}
Validator.must.be.in.range={0} debe estar en el rango [{1}-{2}]
Validator.must.be.at.least={0} deb ser al menos
Validator.already.exists={0} ya existe.
Validator.doesnt.exist={0} no existe.
Validator.exceeds.max.length={0} excede la longitud m<>xima de {1} caracteres.
Validator.invalid.option={0} must be one of [{1}]
Bindings.duplicate.binding=Binding duplicado
JRadioButtonBinding.property.null=La propiedad es nula
JRadioButtonBinding.nothing.selected=Nada seleccionado
JRadioButtonBinding.index.out.of.bounds=<EFBFBD>ndice de bot<6F>n fuera de l<>mite
JComboBoxBinding.property.null=Property is null
JComboBoxBinding.index.out.of.bounds=Combo box index out of bounds

View File

@ -1,87 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on May 1, 2006
*/
package net.sf.launch4j.config;
import java.util.List;
import net.sf.launch4j.binding.IValidatable;
import net.sf.launch4j.binding.Validator;
/**
* @author Copyright (C) 2006 Grzegorz Kowal
*/
public class ClassPath implements IValidatable {
private String mainClass;
private List paths;
public void checkInvariants() {
Validator.checkString(mainClass, Validator.MAX_PATH, "mainClass",
Messages.getString("ClassPath.mainClass"));
Validator.checkOptStrings(paths,
Validator.MAX_PATH,
Validator.MAX_BIG_STR,
"paths",
Messages.getString("ClassPath.path"));
}
public String getMainClass() {
return mainClass;
}
public void setMainClass(String mainClass) {
this.mainClass = mainClass;
}
public List getPaths() {
return paths;
}
public void setPaths(List paths) {
this.paths = paths;
}
public String getPathsString() {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < paths.size(); i++) {
sb.append(paths.get(i));
if (i < paths.size() - 1) {
sb.append(';');
}
}
return sb.toString();
}
}

View File

@ -1,396 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Apr 21, 2005
*/
package net.sf.launch4j.config;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import net.sf.launch4j.binding.IValidatable;
import net.sf.launch4j.binding.Validator;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class Config implements IValidatable {
// 1.x config properties_____________________________________________________________
public static final String HEADER = "header";
public static final String JAR = "jar";
public static final String OUTFILE = "outfile";
public static final String ERR_TITLE = "errTitle";
public static final String JAR_ARGS = "jarArgs";
public static final String CHDIR = "chdir";
public static final String CUSTOM_PROC_NAME = "customProcName";
public static final String STAY_ALIVE = "stayAlive";
public static final String ICON = "icon";
// __________________________________________________________________________________
public static final String DOWNLOAD_URL = "http://java.com/download";
public static final String GUI_HEADER = "gui";
public static final String CONSOLE_HEADER = "console";
private static final String[] HEADER_TYPES = new String[] { GUI_HEADER,
CONSOLE_HEADER };
private static final String[] PRIORITY_CLASS_NAMES = new String[] { "normal",
"idle",
"high" };
private static final int[] PRIORITY_CLASSES = new int[] { 0x00000020,
0x00000040,
0x00000080 };
private boolean dontWrapJar;
private String headerType = GUI_HEADER;
private List headerObjects;
private List libs;
private File jar;
private File outfile;
// Runtime header configuration
private String errTitle;
private String cmdLine;
private String chdir;
private String priority;
private String downloadUrl;
private String supportUrl;
private boolean customProcName;
private boolean stayAlive;
private File manifest;
private File icon;
private List variables;
private SingleInstance singleInstance;
private ClassPath classPath;
private Jre jre;
private Splash splash;
private VersionInfo versionInfo;
private Msg messages;
public void checkInvariants() {
Validator.checkTrue(outfile != null && outfile.getPath().endsWith(".exe"),
"outfile", Messages.getString("Config.specify.output.exe"));
if (dontWrapJar) {
if (jar != null && !jar.getPath().equals("")) {
Validator.checkRelativeWinPath(jar.getPath(), "jar",
Messages.getString("Config.application.jar.path"));
} else {
Validator.checkTrue(classPath != null, "classPath",
Messages.getString("ClassPath.or.jar"));
}
} else {
Validator.checkFile(jar, "jar",
Messages.getString("Config.application.jar"));
}
if (!Validator.isEmpty(chdir)) {
Validator.checkRelativeWinPath(chdir, "chdir",
Messages.getString("Config.chdir.relative"));
Validator.checkFalse(chdir.toLowerCase().equals("true")
|| chdir.toLowerCase().equals("false"),
"chdir", Messages.getString("Config.chdir.path"));
}
Validator.checkOptFile(manifest, "manifest", Messages.getString("Config.manifest"));
Validator.checkOptFile(icon, "icon", Messages.getString("Config.icon"));
Validator.checkOptString(cmdLine, Validator.MAX_BIG_STR, "jarArgs",
Messages.getString("Config.jar.arguments"));
Validator.checkOptString(errTitle, Validator.MAX_STR, "errTitle",
Messages.getString("Config.error.title"));
Validator.checkOptString(downloadUrl, 256,
"downloadUrl", Messages.getString("Config.download.url"));
Validator.checkOptString(supportUrl, 256,
"supportUrl", Messages.getString("Config.support.url"));
Validator.checkIn(getHeaderType(), HEADER_TYPES, "headerType",
Messages.getString("Config.header.type"));
Validator.checkFalse(getHeaderType().equals(CONSOLE_HEADER) && splash != null,
"headerType",
Messages.getString("Config.splash.not.impl.by.console.hdr"));
Validator.checkOptStrings(variables,
Validator.MAX_ARGS,
Validator.MAX_ARGS,
"[^=%\t]+=[^=\t]+",
"variables",
Messages.getString("Config.variables"),
Messages.getString("Config.variables.err"));
Validator.checkIn(getPriority(), PRIORITY_CLASS_NAMES, "priority",
Messages.getString("Config.priority"));
jre.checkInvariants();
}
public void validate() {
checkInvariants();
if (classPath != null) {
classPath.checkInvariants();
}
if (splash != null) {
splash.checkInvariants();
}
if (versionInfo != null) {
versionInfo.checkInvariants();
}
}
/** Change current directory to EXE location. */
public String getChdir() {
return chdir;
}
public void setChdir(String chdir) {
this.chdir = chdir;
}
/** Constant command line arguments passed to the application. */
public String getCmdLine() {
return cmdLine;
}
public void setCmdLine(String cmdLine) {
this.cmdLine = cmdLine;
}
/** Optional, error message box title. */
public String getErrTitle() {
return errTitle;
}
public void setErrTitle(String errTitle) {
this.errTitle = errTitle;
}
/** launch4j header file. */
public String getHeaderType() {
return headerType.toLowerCase();
}
public void setHeaderType(String headerType) {
this.headerType = headerType;
}
/** launch4j header file index - used by GUI. */
public int getHeaderTypeIndex() {
int x = Arrays.asList(HEADER_TYPES).indexOf(getHeaderType());
return x != -1 ? x : 0;
}
public void setHeaderTypeIndex(int headerTypeIndex) {
headerType = HEADER_TYPES[headerTypeIndex];
}
public boolean isCustomHeaderObjects() {
return headerObjects != null && !headerObjects.isEmpty();
}
public List getHeaderObjects() {
return isCustomHeaderObjects() ? headerObjects
: getHeaderType().equals(GUI_HEADER)
? LdDefaults.GUI_HEADER_OBJECTS
: LdDefaults.CONSOLE_HEADER_OBJECTS;
}
public void setHeaderObjects(List headerObjects) {
this.headerObjects = headerObjects;
}
public boolean isCustomLibs() {
return libs != null && !libs.isEmpty();
}
public List getLibs() {
return isCustomLibs() ? libs : LdDefaults.LIBS;
}
public void setLibs(List libs) {
this.libs = libs;
}
/** Wrapper's manifest for User Account Control. */
public File getManifest() {
return manifest;
}
public void setManifest(File manifest) {
this.manifest = manifest;
}
/** ICO file. */
public File getIcon() {
return icon;
}
public void setIcon(File icon) {
this.icon = icon;
}
/** Jar to wrap. */
public File getJar() {
return jar;
}
public void setJar(File jar) {
this.jar = jar;
}
public List getVariables() {
return variables;
}
public void setVariables(List variables) {
this.variables = variables;
}
public ClassPath getClassPath() {
return classPath;
}
public void setClassPath(ClassPath classpath) {
this.classPath = classpath;
}
/** JRE configuration */
public Jre getJre() {
return jre;
}
public void setJre(Jre jre) {
this.jre = jre;
}
/** Output EXE file. */
public File getOutfile() {
return outfile;
}
public void setOutfile(File outfile) {
this.outfile = outfile;
}
/** Custom process name as the output EXE file name. */
public boolean isCustomProcName() {
return customProcName;
}
public void setCustomProcName(boolean customProcName) {
this.customProcName = customProcName;
}
/** Splash screen configuration. */
public Splash getSplash() {
return splash;
}
public void setSplash(Splash splash) {
this.splash = splash;
}
/** Stay alive after launching the application. */
public boolean isStayAlive() {
return stayAlive;
}
public void setStayAlive(boolean stayAlive) {
this.stayAlive = stayAlive;
}
public VersionInfo getVersionInfo() {
return versionInfo;
}
public void setVersionInfo(VersionInfo versionInfo) {
this.versionInfo = versionInfo;
}
public boolean isDontWrapJar() {
return dontWrapJar;
}
public void setDontWrapJar(boolean dontWrapJar) {
this.dontWrapJar = dontWrapJar;
}
public int getPriorityIndex() {
int x = Arrays.asList(PRIORITY_CLASS_NAMES).indexOf(getPriority());
return x != -1 ? x : 0;
}
public void setPriorityIndex(int x) {
priority = PRIORITY_CLASS_NAMES[x];
}
public String getPriority() {
return Validator.isEmpty(priority) ? PRIORITY_CLASS_NAMES[0] : priority;
}
public void setPriority(String priority) {
this.priority = priority;
}
public int getPriorityClass() {
return PRIORITY_CLASSES[getPriorityIndex()];
}
public String getDownloadUrl() {
return downloadUrl == null ? DOWNLOAD_URL : downloadUrl;
}
public void setDownloadUrl(String downloadUrl) {
this.downloadUrl = downloadUrl;
}
public String getSupportUrl() {
return supportUrl;
}
public void setSupportUrl(String supportUrl) {
this.supportUrl = supportUrl;
}
public Msg getMessages() {
return messages;
}
public void setMessages(Msg messages) {
this.messages = messages;
}
public SingleInstance getSingleInstance() {
return singleInstance;
}
public void setSingleInstance(SingleInstance singleInstance) {
this.singleInstance = singleInstance;
}
}

View File

@ -1,249 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Apr 22, 2005
*/
package net.sf.launch4j.config;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import net.sf.launch4j.Util;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class ConfigPersister {
private static final ConfigPersister _instance = new ConfigPersister();
private final XStream _xstream;
private Config _config;
private File _configPath;
private ConfigPersister() {
_xstream = new XStream(new DomDriver());
_xstream.alias("launch4jConfig", Config.class);
_xstream.alias("classPath", ClassPath.class);
_xstream.alias("jre", Jre.class);
_xstream.alias("splash", Splash.class);
_xstream.alias("versionInfo", VersionInfo.class);
_xstream.addImplicitCollection(Config.class, "headerObjects", "obj",
String.class);
_xstream.addImplicitCollection(Config.class, "libs", "lib", String.class);
_xstream.addImplicitCollection(Config.class, "variables", "var", String.class);
_xstream.addImplicitCollection(ClassPath.class, "paths", "cp", String.class);
_xstream.addImplicitCollection(Jre.class, "options", "opt", String.class);
}
public static ConfigPersister getInstance() {
return _instance;
}
public Config getConfig() {
return _config;
}
public File getConfigPath() {
return _configPath;
}
public File getOutputPath() throws IOException {
if (_config.getOutfile().isAbsolute()) {
return _config.getOutfile().getParentFile();
}
File parent = _config.getOutfile().getParentFile();
return (parent != null) ? new File(_configPath, parent.getPath()) : _configPath;
}
public File getOutputFile() throws IOException {
return _config.getOutfile().isAbsolute()
? _config.getOutfile()
: new File(getOutputPath(), _config.getOutfile().getName());
}
public void createBlank() {
_config = new Config();
_config.setJre(new Jre());
_configPath = null;
}
public void setAntConfig(Config c, File basedir) {
_config = c;
_configPath = basedir;
}
public void load(File f) throws ConfigPersisterException {
try {
FileReader r = new FileReader(f);
char[] buf = new char[(int) f.length()];
r.read(buf);
r.close();
// Convert 2.x config to 3.x
String s = String.valueOf(buf)
.replaceAll("<headerType>0<", "<headerType>gui<")
.replaceAll("<headerType>1<", "<headerType>console<")
.replaceAll("jarArgs>", "cmdLine>")
.replaceAll("<jarArgs[ ]*/>", "<cmdLine/>")
.replaceAll("args>", "opt>")
.replaceAll("<args[ ]*/>", "<opt/>")
.replaceAll("<dontUsePrivateJres>false</dontUsePrivateJres>",
"<jdkPreference>" + Jre.JDK_PREFERENCE_PREFER_JRE + "</jdkPreference>")
.replaceAll("<dontUsePrivateJres>true</dontUsePrivateJres>",
"<jdkPreference>" + Jre.JDK_PREFERENCE_JRE_ONLY + "</jdkPreference>")
.replaceAll("<initialHeapSize>0</initialHeapSize>", "")
.replaceAll("<maxHeapSize>0</maxHeapSize>", "");
_config = (Config) _xstream.fromXML(s);
setConfigPath(f);
} catch (Exception e) {
throw new ConfigPersisterException(e);
}
}
/**
* Imports launch4j 1.x.x config file.
*/
public void loadVersion1(File f) throws ConfigPersisterException {
try {
Props props = new Props(f);
_config = new Config();
String header = props.getProperty(Config.HEADER);
_config.setHeaderType(header == null
|| header.toLowerCase().equals("guihead.bin") ? Config.GUI_HEADER
: Config.CONSOLE_HEADER);
_config.setJar(props.getFile(Config.JAR));
_config.setOutfile(props.getFile(Config.OUTFILE));
_config.setJre(new Jre());
_config.getJre().setPath(props.getProperty(Jre.PATH));
_config.getJre().setMinVersion(props.getProperty(Jre.MIN_VERSION));
_config.getJre().setMaxVersion(props.getProperty(Jre.MAX_VERSION));
String args = props.getProperty(Jre.ARGS);
if (args != null) {
List jreOptions = new ArrayList();
jreOptions.add(args);
_config.getJre().setOptions(jreOptions);
}
_config.setCmdLine(props.getProperty(Config.JAR_ARGS));
_config.setChdir("true".equals(props.getProperty(Config.CHDIR))
? "." : null);
_config.setCustomProcName("true".equals(
props.getProperty("setProcName"))); // 1.x
_config.setStayAlive("true".equals(props.getProperty(Config.STAY_ALIVE)));
_config.setErrTitle(props.getProperty(Config.ERR_TITLE));
_config.setIcon(props.getFile(Config.ICON));
File splashFile = props.getFile(Splash.SPLASH_FILE);
if (splashFile != null) {
_config.setSplash(new Splash());
_config.getSplash().setFile(splashFile);
String waitfor = props.getProperty("waitfor"); // 1.x
_config.getSplash().setWaitForWindow(waitfor != null
&& !waitfor.equals(""));
String splashTimeout = props.getProperty(Splash.TIMEOUT);
if (splashTimeout != null) {
_config.getSplash().setTimeout(Integer.parseInt(splashTimeout));
}
_config.getSplash().setTimeoutErr("true".equals(
props.getProperty(Splash.TIMEOUT_ERR)));
} else {
_config.setSplash(null);
}
setConfigPath(f);
} catch (IOException e) {
throw new ConfigPersisterException(e);
}
}
public void save(File f) throws ConfigPersisterException {
try {
BufferedWriter w = new BufferedWriter(new FileWriter(f));
_xstream.toXML(_config, w);
w.close();
setConfigPath(f);
} catch (Exception e) {
throw new ConfigPersisterException(e);
}
}
private void setConfigPath(File configFile) {
_configPath = configFile.getAbsoluteFile().getParentFile();
}
private class Props {
final Properties _properties = new Properties();
public Props(File f) throws IOException {
FileInputStream is = null;
try {
is = new FileInputStream(f);
_properties.load(is);
} finally {
Util.close(is);
}
}
/**
* Get property and remove trailing # comments.
*/
public String getProperty(String key) {
String p = _properties.getProperty(key);
if (p == null) {
return null;
}
int x = p.indexOf('#');
if (x == -1) {
return p;
}
do {
x--;
} while (x > 0 && (p.charAt(x) == ' ' || p.charAt(x) == '\t'));
return (x == 0) ? "" : p.substring(0, x + 1);
}
public File getFile(String key) {
String value = getProperty(key);
return value != null ? new File(value) : null;
}
}
}

View File

@ -1,51 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Apr 22, 2005
*/
package net.sf.launch4j.config;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class ConfigPersisterException extends Exception {
public ConfigPersisterException(String msg, Throwable t) {
super(msg, t);
}
public ConfigPersisterException(Throwable t) {
super(t);
}
}

View File

@ -1,235 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Apr 21, 2005
*/
package net.sf.launch4j.config;
import java.util.Arrays;
import java.util.List;
import net.sf.launch4j.binding.IValidatable;
import net.sf.launch4j.binding.Validator;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class Jre implements IValidatable {
// 1.x config properties_____________________________________________________________
public static final String PATH = "jrepath";
public static final String MIN_VERSION = "javamin";
public static final String MAX_VERSION = "javamax";
public static final String ARGS = "jvmArgs";
// __________________________________________________________________________________
public static final String VERSION_PATTERN = "(\\d\\.){2}\\d(_\\d+)?";
public static final String JDK_PREFERENCE_JRE_ONLY = "jreOnly";
public static final String JDK_PREFERENCE_PREFER_JRE = "preferJre";
public static final String JDK_PREFERENCE_PREFER_JDK = "preferJdk";
public static final String JDK_PREFERENCE_JDK_ONLY = "jdkOnly";
private static final String[] JDK_PREFERENCE_NAMES = new String[] {
JDK_PREFERENCE_JRE_ONLY,
JDK_PREFERENCE_PREFER_JRE,
JDK_PREFERENCE_PREFER_JDK,
JDK_PREFERENCE_JDK_ONLY };
public static final int DEFAULT_JDK_PREFERENCE_INDEX
= Arrays.asList(JDK_PREFERENCE_NAMES).indexOf(JDK_PREFERENCE_PREFER_JRE);
private String path;
private String minVersion;
private String maxVersion;
private String jdkPreference;
private Integer initialHeapSize;
private Integer initialHeapPercent;
private Integer maxHeapSize;
private Integer maxHeapPercent;
private List options;
public void checkInvariants() {
Validator.checkOptString(minVersion, 10, VERSION_PATTERN,
"jre.minVersion", Messages.getString("Jre.min.version"));
Validator.checkOptString(maxVersion, 10, VERSION_PATTERN,
"jre.maxVersion", Messages.getString("Jre.max.version"));
if (Validator.isEmpty(path)) {
Validator.checkFalse(Validator.isEmpty(minVersion),
"jre.minVersion", Messages.getString("Jre.specify.jre.min.version.or.path"));
} else {
Validator.checkString(path, Validator.MAX_PATH,
"jre.path", Messages.getString("Jre.bundled.path"));
}
if (!Validator.isEmpty(maxVersion)) {
Validator.checkFalse(Validator.isEmpty(minVersion),
"jre.minVersion", Messages.getString("Jre.specify.min.version"));
Validator.checkTrue(minVersion.compareTo(maxVersion) < 0,
"jre.maxVersion", Messages.getString("Jre.max.greater.than.min"));
}
Validator.checkTrue(initialHeapSize == null || maxHeapSize != null,
"jre.maxHeapSize", Messages.getString("Jre.initial.and.max.heap"));
Validator.checkTrue(initialHeapSize == null || initialHeapSize.intValue() > 0,
"jre.initialHeapSize", Messages.getString("Jre.initial.heap"));
Validator.checkTrue(maxHeapSize == null || (maxHeapSize.intValue()
>= ((initialHeapSize != null) ? initialHeapSize.intValue() : 1)),
"jre.maxHeapSize", Messages.getString("Jre.max.heap"));
Validator.checkTrue(initialHeapPercent == null || maxHeapPercent != null,
"jre.maxHeapPercent", Messages.getString("Jre.initial.and.max.heap"));
if (initialHeapPercent != null) {
Validator.checkRange(initialHeapPercent.intValue(), 1, 100,
"jre.initialHeapPercent",
Messages.getString("Jre.initial.heap.percent"));
}
if (maxHeapPercent != null) {
Validator.checkRange(maxHeapPercent.intValue(),
initialHeapPercent != null ? initialHeapPercent.intValue() : 1, 100,
"jre.maxHeapPercent",
Messages.getString("Jre.max.heap.percent"));
}
Validator.checkIn(getJdkPreference(), JDK_PREFERENCE_NAMES,
"jre.jdkPreference", Messages.getString("Jre.jdkPreference.invalid"));
Validator.checkOptStrings(options,
Validator.MAX_ARGS,
Validator.MAX_ARGS,
"[^\"]*|([^\"]*\"[^\"]*\"[^\"]*)*",
"jre.options",
Messages.getString("Jre.jvm.options"),
Messages.getString("Jre.jvm.options.unclosed.quotation"));
// Quoted variable references: "[^%]*|([^%]*\"([^%]*%[^%]+%[^%]*)+\"[^%]*)*"
Validator.checkOptStrings(options,
Validator.MAX_ARGS,
Validator.MAX_ARGS,
"[^%]*|([^%]*([^%]*%[^%]+%[^%]*)+[^%]*)*",
"jre.options",
Messages.getString("Jre.jvm.options"),
Messages.getString("Jre.jvm.options.variable"));
}
/** JVM options */
public List getOptions() {
return options;
}
public void setOptions(List options) {
this.options = options;
}
/** Max Java version (x.x.x) */
public String getMaxVersion() {
return maxVersion;
}
public void setMaxVersion(String maxVersion) {
this.maxVersion = maxVersion;
}
/** Min Java version (x.x.x) */
public String getMinVersion() {
return minVersion;
}
public void setMinVersion(String minVersion) {
this.minVersion = minVersion;
}
/** Preference for standalone JRE or JDK-private JRE */
public String getJdkPreference() {
return Validator.isEmpty(jdkPreference) ? JDK_PREFERENCE_PREFER_JRE
: jdkPreference;
}
public void setJdkPreference(String jdkPreference) {
this.jdkPreference = jdkPreference;
}
/** Preference for standalone JRE or JDK-private JRE */
public int getJdkPreferenceIndex() {
int x = Arrays.asList(JDK_PREFERENCE_NAMES).indexOf(getJdkPreference());
return x != -1 ? x : DEFAULT_JDK_PREFERENCE_INDEX;
}
public void setJdkPreferenceIndex(int x) {
jdkPreference = JDK_PREFERENCE_NAMES[x];
}
/** JRE path */
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
/** Initial heap size in MB */
public Integer getInitialHeapSize() {
return initialHeapSize;
}
public void setInitialHeapSize(Integer initialHeapSize) {
this.initialHeapSize = getInteger(initialHeapSize);
}
/** Max heap size in MB */
public Integer getMaxHeapSize() {
return maxHeapSize;
}
public void setMaxHeapSize(Integer maxHeapSize) {
this.maxHeapSize = getInteger(maxHeapSize);
}
public Integer getInitialHeapPercent() {
return initialHeapPercent;
}
public void setInitialHeapPercent(Integer initialHeapPercent) {
this.initialHeapPercent = getInteger(initialHeapPercent);
}
public Integer getMaxHeapPercent() {
return maxHeapPercent;
}
public void setMaxHeapPercent(Integer maxHeapPercent) {
this.maxHeapPercent = getInteger(maxHeapPercent);
}
/** Convert 0 to null */
private Integer getInteger(Integer i) {
return i != null && i.intValue() == 0 ? null : i;
}
}

View File

@ -1,62 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Sep 3, 2005
*/
package net.sf.launch4j.config;
import java.util.Arrays;
import java.util.List;
public class LdDefaults {
public static final List GUI_HEADER_OBJECTS = Arrays.asList(new String[] {
"w32api/crt2.o",
"head/guihead.o",
"head/head.o" });
public static final List CONSOLE_HEADER_OBJECTS = Arrays.asList(new String[] {
"w32api/crt2.o",
"head/consolehead.o",
"head/head.o"});
public static final List LIBS = Arrays.asList(new String[] {
"w32api/libmingw32.a",
"w32api/libgcc.a",
"w32api/libmsvcrt.a",
"w32api/libkernel32.a",
"w32api/libuser32.a",
"w32api/libadvapi32.a",
"w32api/libshell32.a" });
}

View File

@ -1,78 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package net.sf.launch4j.config;
import java.text.MessageFormat;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
public class Messages {
private static final String BUNDLE_NAME = "net.sf.launch4j.config.messages";
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
.getBundle(BUNDLE_NAME);
private static final MessageFormat FORMATTER = new MessageFormat("");
private Messages() {
}
public static String getString(String key) {
try {
return RESOURCE_BUNDLE.getString(key);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
public static String getString(String key, String arg0) {
return getString(key, new Object[] {arg0});
}
public static String getString(String key, String arg0, String arg1) {
return getString(key, new Object[] {arg0, arg1});
}
public static String getString(String key, String arg0, String arg1, String arg2) {
return getString(key, new Object[] {arg0, arg1, arg2});
}
public static String getString(String key, Object[] args) {
try {
FORMATTER.applyPattern(RESOURCE_BUNDLE.getString(key));
return FORMATTER.format(args);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
}

View File

@ -1,111 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Oct 8, 2006
*/
package net.sf.launch4j.config;
import net.sf.launch4j.binding.IValidatable;
import net.sf.launch4j.binding.Validator;
/**
* @author Copyright (C) 2006 Grzegorz Kowal
*/
public class Msg implements IValidatable {
private String startupErr;
private String bundledJreErr;
private String jreVersionErr;
private String launcherErr;
private String instanceAlreadyExistsMsg;
public void checkInvariants() {
Validator.checkOptString(startupErr, 1024, "startupErr",
Messages.getString("Msg.startupErr"));
Validator.checkOptString(bundledJreErr, 1024, "bundledJreErr",
Messages.getString("Msg.bundledJreErr"));
Validator.checkOptString(jreVersionErr, 1024, "jreVersionErr",
Messages.getString("Msg.jreVersionErr"));
Validator.checkOptString(launcherErr, 1024, "launcherErr",
Messages.getString("Msg.launcherErr"));
Validator.checkOptString(instanceAlreadyExistsMsg, 1024, "instanceAlreadyExistsMsg",
Messages.getString("Msg.instanceAlreadyExistsMsg"));
}
public String getStartupErr() {
return !Validator.isEmpty(startupErr) ? startupErr
: "An error occurred while starting the application.";
}
public void setStartupErr(String startupErr) {
this.startupErr = startupErr;
}
public String getBundledJreErr() {
return !Validator.isEmpty(bundledJreErr) ? bundledJreErr
: "This application was configured to use a bundled Java Runtime" +
" Environment but the runtime is missing or corrupted.";
}
public void setBundledJreErr(String bundledJreErr) {
this.bundledJreErr = bundledJreErr;
}
public String getJreVersionErr() {
return !Validator.isEmpty(jreVersionErr) ? jreVersionErr
: "This application requires a Java Runtime Environment";
}
public void setJreVersionErr(String jreVersionErr) {
this.jreVersionErr = jreVersionErr;
}
public String getLauncherErr() {
return !Validator.isEmpty(launcherErr) ? launcherErr
: "The registry refers to a nonexistent Java Runtime Environment" +
" installation or the runtime is corrupted.";
}
public void setLauncherErr(String launcherErr) {
this.launcherErr = launcherErr;
}
public String getInstanceAlreadyExistsMsg() {
return !Validator.isEmpty(instanceAlreadyExistsMsg) ? instanceAlreadyExistsMsg
: "An application instance is already running.";
}
public void setInstanceAlreadyExistsMsg(String instanceAlreadyExistsMsg) {
this.instanceAlreadyExistsMsg = instanceAlreadyExistsMsg;
}
}

View File

@ -1,74 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* Created on 2007-09-16
*/
package net.sf.launch4j.config;
import net.sf.launch4j.binding.IValidatable;
import net.sf.launch4j.binding.Validator;
/**
* @author Copyright (C) 2007 Grzegorz Kowal
*/
public class SingleInstance implements IValidatable {
private String mutexName;
private String windowTitle;
public void checkInvariants() {
Validator.checkString(mutexName, Validator.MAX_STR,
"singleInstance.mutexName",
Messages.getString("SingleInstance.mutexName"));
Validator.checkOptString(windowTitle, Validator.MAX_STR,
"singleInstance.windowTitle",
Messages.getString("SingleInstance.windowTitle"));
}
public String getWindowTitle() {
return windowTitle;
}
public void setWindowTitle(String appWindowName) {
this.windowTitle = appWindowName;
}
public String getMutexName() {
return mutexName;
}
public void setMutexName(String mutexName) {
this.mutexName = mutexName;
}
}

View File

@ -1,103 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on Apr 21, 2005
*/
package net.sf.launch4j.config;
import java.io.File;
import net.sf.launch4j.binding.IValidatable;
import net.sf.launch4j.binding.Validator;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class Splash implements IValidatable {
// 1.x config properties_____________________________________________________________
public static final String SPLASH_FILE = "splash";
public static final String WAIT_FOR_TITLE = "waitForTitle";
public static final String TIMEOUT = "splashTimeout";
public static final String TIMEOUT_ERR = "splashTimeoutErr";
// __________________________________________________________________________________
private File file;
private boolean waitForWindow = true;
private int timeout = 60;
private boolean timeoutErr = true;
public void checkInvariants() {
Validator.checkFile(file, "splash.file",
Messages.getString("Splash.splash.file"));
Validator.checkRange(timeout, 1, 60 * 15, "splash.timeout",
Messages.getString("Splash.splash.timeout"));
}
/** Splash screen in BMP format. */
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
/** Splash timeout in seconds. */
public int getTimeout() {
return timeout;
}
public void setTimeout(int timeout) {
this.timeout = timeout;
}
/** Signal error on splash timeout. */
public boolean isTimeoutErr() {
return timeoutErr;
}
public void setTimeoutErr(boolean timeoutErr) {
this.timeoutErr = timeoutErr;
}
/** Hide splash screen when the child process displayes the first window. */
public boolean getWaitForWindow() {
return waitForWindow;
}
public void setWaitForWindow(boolean waitForWindow) {
this.waitForWindow = waitForWindow;
}
}

View File

@ -1,168 +0,0 @@
/*
Launch4j (http://launch4j.sourceforge.net/)
Cross-platform Java application wrapper for creating Windows native executables.
Copyright (c) 2004, 2007 Grzegorz Kowal
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the Launch4j nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Created on May 21, 2005
*/
package net.sf.launch4j.config;
import net.sf.launch4j.binding.IValidatable;
import net.sf.launch4j.binding.Validator;
/**
* @author Copyright (C) 2005 Grzegorz Kowal
*/
public class VersionInfo implements IValidatable {
public static final String VERSION_PATTERN = "(\\d+\\.){3}\\d+";
private String fileVersion;
private String txtFileVersion;
private String fileDescription;
private String copyright;
private String productVersion;
private String txtProductVersion;
private String productName;
private String companyName;
private String internalName;
private String originalFilename;
public void checkInvariants() {
Validator.checkString(fileVersion, 20, VERSION_PATTERN,
"versionInfo.fileVersion",
Messages.getString("VersionInfo.file.version"));
Validator.checkString(txtFileVersion, 50, "versionInfo.txtFileVersion",
Messages.getString("VersionInfo.txt.file.version"));
Validator.checkString(fileDescription, 150, "versionInfo.fileDescription",
Messages.getString("VersionInfo.file.description"));
Validator.checkString(copyright, 150, "versionInfo.copyright",
Messages.getString("VersionInfo.copyright"));
Validator.checkString(productVersion, 20, VERSION_PATTERN,
"versionInfo.productVersion",
Messages.getString("VersionInfo.product.version"));
Validator.checkString(txtProductVersion, 50, "versionInfo.txtProductVersion",
Messages.getString("VersionInfo.txt.product.version"));
Validator.checkString(productName, 150, "versionInfo.productName",
Messages.getString("VersionInfo.product.name"));
Validator.checkOptString(companyName, 150, "versionInfo.companyName",
Messages.getString("VersionInfo.company.name"));
Validator.checkString(internalName, 50, "versionInfo.internalName",
Messages.getString("VersionInfo.internal.name"));
Validator.checkTrue(!internalName.endsWith(".exe"), "versionInfo.internalName",
Messages.getString("VersionInfo.internal.name.not.exe"));
Validator.checkString(originalFilename, 50, "versionInfo.originalFilename",
Messages.getString("VersionInfo.original.filename"));
Validator.checkTrue(originalFilename.endsWith(".exe"),
"versionInfo.originalFilename",
Messages.getString("VersionInfo.original.filename.exe"));
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getCopyright() {
return copyright;
}
public void setCopyright(String copyright) {
this.copyright = copyright;
}
public String getFileDescription() {
return fileDescription;
}
public void setFileDescription(String fileDescription) {
this.fileDescription = fileDescription;
}
public String getFileVersion() {
return fileVersion;
}
public void setFileVersion(String fileVersion) {
this.fileVersion = fileVersion;
}
public String getInternalName() {
return internalName;
}
public void setInternalName(String internalName) {
this.internalName = internalName;
}
public String getOriginalFilename() {
return originalFilename;
}
public void setOriginalFilename(String originalFilename) {
this.originalFilename = originalFilename;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductVersion() {
return productVersion;
}
public void setProductVersion(String productVersion) {
this.productVersion = productVersion;
}
public String getTxtFileVersion() {
return txtFileVersion;
}
public void setTxtFileVersion(String txtFileVersion) {
this.txtFileVersion = txtFileVersion;
}
public String getTxtProductVersion() {
return txtProductVersion;
}
public void setTxtProductVersion(String txtProductVersion) {
this.txtProductVersion = txtProductVersion;
}
}

View File

@ -1,93 +0,0 @@
#
# Launch4j (http://launch4j.sourceforge.net/)
# Cross-platform Java application wrapper for creating Windows native executables.
#
# Copyright (c) 2004, 2007 Grzegorz Kowal
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Launch4j nor the names of its contributors
# may be used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
Splash.splash.file=Splash file
Splash.splash.timeout=Splash timeout
Config.specify.output.exe=Specify output file with .exe extension.
Config.application.jar=Application jar
Config.application.jar.path=Specify runtime path of the jar relative to the executable.
Config.chdir.relative='chdir' must be a path relative to the executable.
Config.chdir.path='chdir' is now a path instead of a boolean, please check the docs.
Config.manifest=Manifest
Config.icon=Icon
Config.jar.arguments=Jar arguments
Config.error.title=Error title
Config.download.url=Download URL
Config.support.url=Support URL
Config.header.type=Header type
Config.splash.not.impl.by.console.hdr=Splash screen is not implemented by console header.
Config.variables=Environment variables
Config.variables.err=Environment variable assignment should have the form varname=[value][%varref%]...
Config.priority=Process priority
ClassPath.mainClass=Main class
ClassPath.or.jar=Specify runtime path of a jar or the classpath.
ClassPath.path=Classpath
VersionInfo.file.version=File version, should be 'x.x.x.x'
VersionInfo.txt.file.version=Free form file version
VersionInfo.file.description=File description
VersionInfo.copyright=Copyright
VersionInfo.product.version=Product version, should be 'x.x.x.x'
VersionInfo.txt.product.version=Free from product version
VersionInfo.product.name=Product name
VersionInfo.company.name=Company name
VersionInfo.internal.name=Internal name
VersionInfo.internal.name.not.exe=Internal name shouldn't have the .exe extension.
VersionInfo.original.filename=Original filename
VersionInfo.original.filename.exe=Original filename should end with the .exe extension.
Jre.min.version=Minimum JRE version should be x.x.x[_xx]
Jre.max.version=Maximum JRE version should be x.x.x[_xx]
Jre.specify.jre.min.version.or.path=Specify minimum JRE version and/or bundled JRE path.
Jre.bundled.path=Bundled JRE path
Jre.specify.min.version=Specify minimum JRE version.
Jre.max.greater.than.min=Maximum JRE version must be greater than the minimum.\nTo use a certain JRE version, you may set the min/max range to [1.4.2 - 1.4.2_10] for example.
Jre.initial.and.max.heap=If you change the initial heap size please also specify the maximum size.
Jre.initial.heap=Initial heap size must be greater than 0, leave the field blank to use the JVM default.
Jre.max.heap=Maximum heap size cannot be less than the initial size, leave the field blank to use the JVM default.
Jre.initial.heap.percent=Initial heap %
Jre.max.heap.percent=Maximum heap %
Jre.jdkPreference.invalid=Unrecognised value for JDK preference, should be between 0 and 3 inclusive.
Jre.jvm.options=JVM arguments
Jre.jvm.options.unclosed.quotation=JVM arguments contain an unclosed quotation.
Jre.jvm.options.variable=Invalid environment variable reference.
Msg.startupErr=Startup error message
Msg.bundledJreErr=Bundled JRE error message
Msg.jreVersionErr=JRE version error message
Msg.launcherErr=Launcher error message
SingleInstance.mutexName=Mutex name
SingleInstance.windowTitle=Window title

View File

@ -1,75 +0,0 @@
#
# Launch4j (http://launch4j.sourceforge.net/)
# Cross-platform Java application wrapper for creating Windows native executables.
#
# Copyright (c) 2004, 2007 Grzegorz Kowal, Patricio Mart<72>nez Ros
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
# * Neither the name of the Launch4j nor the names of its contributors
# may be used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
Splash.splash.file = Fichero de la pantalla de bienvenida
Splash.splash.timeout = Tiempo de espera de la pantalla de bienvenida
Config.specify.output.exe = Especifique el fichero de salida con extensi\u00F3n .exe.
Config.application.jar = Aplicaci\u00F3n jar
Config.application.jar.path = Especifique la ruta del jar relativa al ejecutable.
Config.chdir.relative = 'Cambiar al directorio' debe ser una ruta relativa al ejecutable.
Config.chdir.path = 'Cambiar al directorio' ahora es una ruta en lugar de un booleano, por favor consulte la documentaci\u00F3n.
Config.icon = Icono
Config.jar.arguments = Argumentos del jar
Config.error.title = T\u00EDtulo de error
Config.header.type = Tipo de cabecera
Config.splash.not.impl.by.console.hdr = La pantalla de bienvenida no est\u00E1 implementada para la cabecera de tipo consola.
VersionInfo.file.version = La versi\u00F3n del fichero, deber\u00EDa ser 'x.x.x.x'
VersionInfo.txt.file.version = Forma libre de versi\u00F3n del fichero
VersionInfo.file.description = Descripci\u00F3n del fichero
VersionInfo.copyright = Copyright
VersionInfo.product.version = Versi\u00F3n del producto, deber\u00EDa ser 'x.x.x.x'
VersionInfo.txt.product.version = Forma libre de versi\u00F3n del producto
VersionInfo.product.name = Nombre del producto
VersionInfo.company.name = Nombre de la organizaci\u00F3n
VersionInfo.internal.name = Nombre interno
VersionInfo.internal.name.not.exe = El nombre interno no deber\u00EDa tener extensi\u00F3n .exe.
VersionInfo.original.filename = Nombre original del fichero
VersionInfo.original.filename.exe = El nombre original del fichero debe acabar con extensi\u00F3n .exe.
Jre.min.version = La versi\u00F3n m\u00EDnima del JRE deber\u00EDa ser x.x.x[_xx]
Jre.max.version = La versi\u00F3n m\u00E1xima del JRE deber\u00EDa ser x.x.x[_xx]
Jre.specify.jre.min.version.or.path=Specify minimum JRE version and/or bundled JRE path.
Jre.bundled.path.rel = La ruta del JRE debe ser relativa al ejecutable.
Jre.specify.min.version = Especifique la versi\u00F3n m\u00EDnima del JRE.
Jre.max.greater.than.min = La versi\u00F3n m\u00E1xima del JRE debe ser mayor que la m\u00EDnima.\nPara usar cierta versi\u00F3n del JRE, puede esyablecer el rango m\u00EDnimo/m\u00E1ximo a [1.4.2 - 1.4.2_10], por ejemplo.
Jre.jvm.options = Argumentos de la JVM
Msg.startupErr=Startup error message
Msg.bundledJreErr=Bundled JRE error message
Msg.jreVersionErr=JRE version error message
Msg.launcherErr=Launcher error message
SingleInstance.mutexName=Mutex name
SingleInstance.windowTitle=Window title

View File

@ -1,283 +0,0 @@
package net.sf.launch4j.form;
import com.jeta.forms.components.separator.TitledSeparator;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
public abstract class BasicForm extends JPanel
{
protected final JButton _outfileButton = new JButton();
protected final JLabel _outfileLabel = new JLabel();
protected final JLabel _iconLabel = new JLabel();
protected final JLabel _jarLabel = new JLabel();
protected final JButton _jarButton = new JButton();
protected final JButton _iconButton = new JButton();
protected final JLabel _cmdLineLabel = new JLabel();
protected final JLabel _optionsLabel = new JLabel();
protected final JLabel _chdirLabel = new JLabel();
protected final JLabel _processPriorityLabel = new JLabel();
protected final JRadioButton _normalPriorityRadio = new JRadioButton();
protected final ButtonGroup _buttongroup1 = new ButtonGroup();
protected final JRadioButton _idlePriorityRadio = new JRadioButton();
protected final JRadioButton _highPriorityRadio = new JRadioButton();
protected final JCheckBox _customProcNameCheck = new JCheckBox();
protected final JCheckBox _stayAliveCheck = new JCheckBox();
protected final JTextField _cmdLineField = new JTextField();
protected final JTextField _chdirField = new JTextField();
protected final JTextField _iconField = new JTextField();
protected final JCheckBox _dontWrapJarCheck = new JCheckBox();
protected final JTextField _jarField = new JTextField();
protected final JTextField _outfileField = new JTextField();
protected final JLabel _errorTitleLabel = new JLabel();
protected final JTextField _errorTitleField = new JTextField();
protected final JLabel _downloadUrlLabel = new JLabel();
protected final JTextField _downloadUrlField = new JTextField();
protected final JLabel _supportUrlLabel = new JLabel();
protected final JTextField _supportUrlField = new JTextField();
protected final JTextField _manifestField = new JTextField();
protected final JButton _manifestButton = new JButton();
/**
* Default constructor
*/
public BasicForm()
{
initializePanel();
}
/**
* Adds fill components to empty cells in the first row and first column of the grid.
* This ensures that the grid spacing will be the same as shown in the designer.
* @param cols an array of column indices in the first row where fill components should be added.
* @param rows an array of row indices in the first column where fill components should be added.
*/
void addFillComponents( Container panel, int[] cols, int[] rows )
{
Dimension filler = new Dimension(10,10);
boolean filled_cell_11 = false;
CellConstraints cc = new CellConstraints();
if ( cols.length > 0 && rows.length > 0 )
{
if ( cols[0] == 1 && rows[0] == 1 )
{
/** add a rigid area */
panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
filled_cell_11 = true;
}
}
for( int index = 0; index < cols.length; index++ )
{
if ( cols[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
}
for( int index = 0; index < rows.length; index++ )
{
if ( rows[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
}
}
/**
* Helper method to load an image file from the CLASSPATH
* @param imageName the package and name of the file to load relative to the CLASSPATH
* @return an ImageIcon instance with the specified image file
* @throws IllegalArgumentException if the image resource cannot be loaded.
*/
public ImageIcon loadImage( String imageName )
{
try
{
ClassLoader classloader = getClass().getClassLoader();
java.net.URL url = classloader.getResource( imageName );
if ( url != null )
{
ImageIcon icon = new ImageIcon( url );
return icon;
}
}
catch( Exception e )
{
e.printStackTrace();
}
throw new IllegalArgumentException( "Unable to load image: " + imageName );
}
public JPanel createPanel()
{
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:7DLU:NONE,FILL:DEFAULT:NONE,FILL:7DLU:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0),FILL:3DLU:NONE,FILL:26PX:NONE,FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
_outfileButton.setIcon(loadImage("images/open16.png"));
_outfileButton.setName("outfileButton");
jpanel1.add(_outfileButton,cc.xy(12,2));
_outfileLabel.setIcon(loadImage("images/asterix.gif"));
_outfileLabel.setName("outfileLabel");
_outfileLabel.setText(Messages.getString("outfile"));
jpanel1.add(_outfileLabel,cc.xy(2,2));
_iconLabel.setName("iconLabel");
_iconLabel.setText(Messages.getString("icon"));
jpanel1.add(_iconLabel,cc.xy(2,10));
_jarLabel.setIcon(loadImage("images/asterix.gif"));
_jarLabel.setName("jarLabel");
_jarLabel.setText(Messages.getString("jar"));
jpanel1.add(_jarLabel,cc.xy(2,4));
_jarButton.setIcon(loadImage("images/open16.png"));
_jarButton.setName("jarButton");
jpanel1.add(_jarButton,cc.xy(12,4));
_iconButton.setIcon(loadImage("images/open16.png"));
_iconButton.setName("iconButton");
jpanel1.add(_iconButton,cc.xy(12,10));
_cmdLineLabel.setName("cmdLineLabel");
_cmdLineLabel.setText(Messages.getString("cmdLine"));
_cmdLineLabel.setToolTipText("");
jpanel1.add(_cmdLineLabel,cc.xy(2,14));
_optionsLabel.setName("optionsLabel");
_optionsLabel.setText(Messages.getString("options"));
jpanel1.add(_optionsLabel,cc.xy(2,18));
_chdirLabel.setName("chdirLabel");
_chdirLabel.setText(Messages.getString("chdir"));
jpanel1.add(_chdirLabel,cc.xy(2,12));
_processPriorityLabel.setName("processPriorityLabel");
_processPriorityLabel.setText(Messages.getString("priority"));
jpanel1.add(_processPriorityLabel,cc.xy(2,16));
_normalPriorityRadio.setActionCommand(Messages.getString("normalPriority"));
_normalPriorityRadio.setName("normalPriorityRadio");
_normalPriorityRadio.setText(Messages.getString("normalPriority"));
_buttongroup1.add(_normalPriorityRadio);
jpanel1.add(_normalPriorityRadio,cc.xy(4,16));
_idlePriorityRadio.setActionCommand(Messages.getString("idlePriority"));
_idlePriorityRadio.setName("idlePriorityRadio");
_idlePriorityRadio.setText(Messages.getString("idlePriority"));
_buttongroup1.add(_idlePriorityRadio);
jpanel1.add(_idlePriorityRadio,cc.xy(6,16));
_highPriorityRadio.setActionCommand(Messages.getString("highPriority"));
_highPriorityRadio.setName("highPriorityRadio");
_highPriorityRadio.setText(Messages.getString("highPriority"));
_buttongroup1.add(_highPriorityRadio);
jpanel1.add(_highPriorityRadio,cc.xy(8,16));
_customProcNameCheck.setActionCommand("Custom process name");
_customProcNameCheck.setName("customProcNameCheck");
_customProcNameCheck.setText(Messages.getString("customProcName"));
jpanel1.add(_customProcNameCheck,cc.xywh(4,18,7,1));
_stayAliveCheck.setActionCommand("Stay alive after launching a GUI application");
_stayAliveCheck.setName("stayAliveCheck");
_stayAliveCheck.setText(Messages.getString("stayAlive"));
jpanel1.add(_stayAliveCheck,cc.xywh(4,20,7,1));
_cmdLineField.setName("cmdLineField");
_cmdLineField.setToolTipText(Messages.getString("cmdLineTip"));
jpanel1.add(_cmdLineField,cc.xywh(4,14,7,1));
_chdirField.setName("chdirField");
_chdirField.setToolTipText(Messages.getString("chdirTip"));
jpanel1.add(_chdirField,cc.xywh(4,12,7,1));
_iconField.setName("iconField");
_iconField.setToolTipText(Messages.getString("iconTip"));
jpanel1.add(_iconField,cc.xywh(4,10,7,1));
_dontWrapJarCheck.setActionCommand("Don't wrap the jar, launch it only");
_dontWrapJarCheck.setName("dontWrapJarCheck");
_dontWrapJarCheck.setText(Messages.getString("dontWrapJar"));
jpanel1.add(_dontWrapJarCheck,cc.xywh(4,6,7,1));
_jarField.setName("jarField");
_jarField.setToolTipText(Messages.getString("jarTip"));
jpanel1.add(_jarField,cc.xywh(4,4,7,1));
_outfileField.setName("outfileField");
_outfileField.setToolTipText(Messages.getString("outfileTip"));
jpanel1.add(_outfileField,cc.xywh(4,2,7,1));
TitledSeparator titledseparator1 = new TitledSeparator();
titledseparator1.setText(Messages.getString("downloadAndSupport"));
jpanel1.add(titledseparator1,cc.xywh(2,22,11,1));
_errorTitleLabel.setName("errorTitleLabel");
_errorTitleLabel.setText(Messages.getString("errorTitle"));
jpanel1.add(_errorTitleLabel,cc.xy(2,24));
_errorTitleField.setName("errorTitleField");
_errorTitleField.setToolTipText(Messages.getString("errorTitleTip"));
jpanel1.add(_errorTitleField,cc.xywh(4,24,7,1));
_downloadUrlLabel.setIcon(loadImage("images/asterix.gif"));
_downloadUrlLabel.setName("downloadUrlLabel");
_downloadUrlLabel.setText(Messages.getString("downloadUrl"));
jpanel1.add(_downloadUrlLabel,cc.xy(2,26));
_downloadUrlField.setName("downloadUrlField");
jpanel1.add(_downloadUrlField,cc.xywh(4,26,7,1));
_supportUrlLabel.setName("supportUrlLabel");
_supportUrlLabel.setText(Messages.getString("supportUrl"));
jpanel1.add(_supportUrlLabel,cc.xy(2,28));
_supportUrlField.setName("supportUrlField");
jpanel1.add(_supportUrlField,cc.xywh(4,28,7,1));
JLabel jlabel1 = new JLabel();
jlabel1.setText(Messages.getString("manifest"));
jpanel1.add(jlabel1,cc.xy(2,8));
_manifestField.setName("manifestField");
_manifestField.setToolTipText(Messages.getString("manifestTip"));
jpanel1.add(_manifestField,cc.xywh(4,8,7,1));
_manifestButton.setIcon(loadImage("images/open16.png"));
_manifestButton.setName("manifestButton");
jpanel1.add(_manifestButton,cc.xy(12,8));
addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29 });
return jpanel1;
}
/**
* Initializer
*/
protected void initializePanel()
{
setLayout(new BorderLayout());
add(createPanel(), BorderLayout.CENTER);
}
}

View File

@ -1,193 +0,0 @@
package net.sf.launch4j.form;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
public abstract class ClassPathForm extends JPanel
{
protected final JTextField _classpathField = new JTextField();
protected final JLabel _classpathFieldLabel = new JLabel();
protected final JLabel _classpathListLabel = new JLabel();
protected final JList _classpathList = new JList();
protected final JLabel _mainclassLabel = new JLabel();
protected final JTextField _mainclassField = new JTextField();
protected final JButton _acceptClasspathButton = new JButton();
protected final JButton _removeClasspathButton = new JButton();
protected final JButton _importClasspathButton = new JButton();
protected final JButton _classpathUpButton = new JButton();
protected final JButton _classpathDownButton = new JButton();
protected final JCheckBox _classpathCheck = new JCheckBox();
protected final JButton _newClasspathButton = new JButton();
/**
* Default constructor
*/
public ClassPathForm()
{
initializePanel();
}
/**
* Adds fill components to empty cells in the first row and first column of the grid.
* This ensures that the grid spacing will be the same as shown in the designer.
* @param cols an array of column indices in the first row where fill components should be added.
* @param rows an array of row indices in the first column where fill components should be added.
*/
void addFillComponents( Container panel, int[] cols, int[] rows )
{
Dimension filler = new Dimension(10,10);
boolean filled_cell_11 = false;
CellConstraints cc = new CellConstraints();
if ( cols.length > 0 && rows.length > 0 )
{
if ( cols[0] == 1 && rows[0] == 1 )
{
/** add a rigid area */
panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
filled_cell_11 = true;
}
}
for( int index = 0; index < cols.length; index++ )
{
if ( cols[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
}
for( int index = 0; index < rows.length; index++ )
{
if ( rows[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
}
}
/**
* Helper method to load an image file from the CLASSPATH
* @param imageName the package and name of the file to load relative to the CLASSPATH
* @return an ImageIcon instance with the specified image file
* @throws IllegalArgumentException if the image resource cannot be loaded.
*/
public ImageIcon loadImage( String imageName )
{
try
{
ClassLoader classloader = getClass().getClassLoader();
java.net.URL url = classloader.getResource( imageName );
if ( url != null )
{
ImageIcon icon = new ImageIcon( url );
return icon;
}
}
catch( Exception e )
{
e.printStackTrace();
}
throw new IllegalArgumentException( "Unable to load image: " + imageName );
}
public JPanel createPanel()
{
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:DEFAULT:NONE,FILL:3DLU:NONE,FILL:26PX:NONE,FILL:7DLU:NONE","CENTER:9DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:DEFAULT:GROW(1.0),CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:9DLU:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
_classpathField.setName("classpathField");
jpanel1.add(_classpathField,cc.xywh(4,11,7,1));
_classpathFieldLabel.setIcon(loadImage("images/asterix.gif"));
_classpathFieldLabel.setName("classpathFieldLabel");
_classpathFieldLabel.setText(Messages.getString("editClassPath"));
jpanel1.add(_classpathFieldLabel,cc.xy(2,11));
_classpathListLabel.setName("classpathListLabel");
_classpathListLabel.setText(Messages.getString("classPath"));
jpanel1.add(_classpathListLabel,cc.xy(2,6));
_classpathList.setName("classpathList");
JScrollPane jscrollpane1 = new JScrollPane();
jscrollpane1.setViewportView(_classpathList);
jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane1,cc.xywh(4,6,7,4));
_mainclassLabel.setIcon(loadImage("images/asterix.gif"));
_mainclassLabel.setName("mainclassLabel");
_mainclassLabel.setText(Messages.getString("mainClass"));
jpanel1.add(_mainclassLabel,cc.xy(2,4));
_mainclassField.setName("mainclassField");
jpanel1.add(_mainclassField,cc.xywh(4,4,7,1));
_acceptClasspathButton.setActionCommand("Add");
_acceptClasspathButton.setIcon(loadImage("images/ok16.png"));
_acceptClasspathButton.setName("acceptClasspathButton");
_acceptClasspathButton.setText(Messages.getString("accept"));
jpanel1.add(_acceptClasspathButton,cc.xy(8,13));
_removeClasspathButton.setActionCommand("Remove");
_removeClasspathButton.setIcon(loadImage("images/cancel16.png"));
_removeClasspathButton.setName("removeClasspathButton");
_removeClasspathButton.setText(Messages.getString("remove"));
jpanel1.add(_removeClasspathButton,cc.xy(10,13));
_importClasspathButton.setIcon(loadImage("images/open16.png"));
_importClasspathButton.setName("importClasspathButton");
_importClasspathButton.setToolTipText(Messages.getString("importClassPath"));
jpanel1.add(_importClasspathButton,cc.xy(12,4));
_classpathUpButton.setIcon(loadImage("images/up16.png"));
_classpathUpButton.setName("classpathUpButton");
jpanel1.add(_classpathUpButton,cc.xy(12,6));
_classpathDownButton.setIcon(loadImage("images/down16.png"));
_classpathDownButton.setName("classpathDownButton");
jpanel1.add(_classpathDownButton,cc.xy(12,8));
_classpathCheck.setActionCommand("Custom classpath");
_classpathCheck.setName("classpathCheck");
_classpathCheck.setText(Messages.getString("customClassPath"));
jpanel1.add(_classpathCheck,cc.xy(4,2));
_newClasspathButton.setActionCommand("New");
_newClasspathButton.setIcon(loadImage("images/new16.png"));
_newClasspathButton.setName("newClasspathButton");
_newClasspathButton.setText(Messages.getString("new"));
jpanel1.add(_newClasspathButton,cc.xy(6,13));
addFillComponents(jpanel1,new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13 },new int[]{ 1,2,3,4,5,6,7,8,9,10,11,12,13,14 });
return jpanel1;
}
/**
* Initializer
*/
protected void initializePanel()
{
setLayout(new BorderLayout());
add(createPanel(), BorderLayout.CENTER);
}
}

View File

@ -1,132 +0,0 @@
package net.sf.launch4j.form;
import com.jeta.forms.components.separator.TitledSeparator;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
public abstract class ConfigForm extends JPanel
{
protected final JTextArea _logTextArea = new JTextArea();
protected final TitledSeparator _logSeparator = new TitledSeparator();
protected final JTabbedPane _tab = new JTabbedPane();
/**
* Default constructor
*/
public ConfigForm()
{
initializePanel();
}
/**
* Adds fill components to empty cells in the first row and first column of the grid.
* This ensures that the grid spacing will be the same as shown in the designer.
* @param cols an array of column indices in the first row where fill components should be added.
* @param rows an array of row indices in the first column where fill components should be added.
*/
void addFillComponents( Container panel, int[] cols, int[] rows )
{
Dimension filler = new Dimension(10,10);
boolean filled_cell_11 = false;
CellConstraints cc = new CellConstraints();
if ( cols.length > 0 && rows.length > 0 )
{
if ( cols[0] == 1 && rows[0] == 1 )
{
/** add a rigid area */
panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
filled_cell_11 = true;
}
}
for( int index = 0; index < cols.length; index++ )
{
if ( cols[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
}
for( int index = 0; index < rows.length; index++ )
{
if ( rows[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
}
}
/**
* Helper method to load an image file from the CLASSPATH
* @param imageName the package and name of the file to load relative to the CLASSPATH
* @return an ImageIcon instance with the specified image file
* @throws IllegalArgumentException if the image resource cannot be loaded.
*/
public ImageIcon loadImage( String imageName )
{
try
{
ClassLoader classloader = getClass().getClassLoader();
java.net.URL url = classloader.getResource( imageName );
if ( url != null )
{
ImageIcon icon = new ImageIcon( url );
return icon;
}
}
catch( Exception e )
{
e.printStackTrace();
}
throw new IllegalArgumentException( "Unable to load image: " + imageName );
}
public JPanel createPanel()
{
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:7DLU:NONE","CENTER:3DLU:NONE,FILL:DEFAULT:NONE,CENTER:3DLU:NONE,CENTER:DEFAULT:NONE,CENTER:3DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:9DLU:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
_logTextArea.setName("logTextArea");
JScrollPane jscrollpane1 = new JScrollPane();
jscrollpane1.setViewportView(_logTextArea);
jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane1,cc.xy(2,6));
_logSeparator.setName("logSeparator");
_logSeparator.setText(Messages.getString("log"));
jpanel1.add(_logSeparator,cc.xy(2,4));
_tab.setName("tab");
jpanel1.add(_tab,cc.xywh(1,2,3,1));
addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,3,4,5,6,7 });
return jpanel1;
}
/**
* Initializer
*/
protected void initializePanel()
{
setLayout(new BorderLayout());
add(createPanel(), BorderLayout.CENTER);
}
}

View File

@ -1,127 +0,0 @@
package net.sf.launch4j.form;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public abstract class EnvironmentVarsForm extends JPanel
{
protected final JTextArea _envVarsTextArea = new JTextArea();
protected final JLabel _envVarsLabel = new JLabel();
/**
* Default constructor
*/
public EnvironmentVarsForm()
{
initializePanel();
}
/**
* Adds fill components to empty cells in the first row and first column of the grid.
* This ensures that the grid spacing will be the same as shown in the designer.
* @param cols an array of column indices in the first row where fill components should be added.
* @param rows an array of row indices in the first column where fill components should be added.
*/
void addFillComponents( Container panel, int[] cols, int[] rows )
{
Dimension filler = new Dimension(10,10);
boolean filled_cell_11 = false;
CellConstraints cc = new CellConstraints();
if ( cols.length > 0 && rows.length > 0 )
{
if ( cols[0] == 1 && rows[0] == 1 )
{
/** add a rigid area */
panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
filled_cell_11 = true;
}
}
for( int index = 0; index < cols.length; index++ )
{
if ( cols[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
}
for( int index = 0; index < rows.length; index++ )
{
if ( rows[index] == 1 && filled_cell_11 )
{
continue;
}
panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
}
}
/**
* Helper method to load an image file from the CLASSPATH
* @param imageName the package and name of the file to load relative to the CLASSPATH
* @return an ImageIcon instance with the specified image file
* @throws IllegalArgumentException if the image resource cannot be loaded.
*/
public ImageIcon loadImage( String imageName )
{
try
{
ClassLoader classloader = getClass().getClassLoader();
java.net.URL url = classloader.getResource( imageName );
if ( url != null )
{
ImageIcon icon = new ImageIcon( url );
return icon;
}
}
catch( Exception e )
{
e.printStackTrace();
}
throw new IllegalArgumentException( "Unable to load image: " + imageName );
}
public JPanel createPanel()
{
JPanel jpanel1 = new JPanel();
FormLayout formlayout1 = new FormLayout("FILL:7DLU:NONE,RIGHT:MAX(65DLU;DEFAULT):NONE,FILL:3DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:7DLU:NONE","CENTER:9DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:9DLU:NONE");
CellConstraints cc = new CellConstraints();
jpanel1.setLayout(formlayout1);
_envVarsTextArea.setName("envVarsTextArea");
JScrollPane jscrollpane1 = new JScrollPane();
jscrollpane1.setViewportView(_envVarsTextArea);
jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
jpanel1.add(jscrollpane1,cc.xy(4,2));
_envVarsLabel.setName("envVarsLabel");
_envVarsLabel.setText(Messages.getString("setVariables"));
jpanel1.add(_envVarsLabel,new CellConstraints(2,2,1,1,CellConstraints.DEFAULT,CellConstraints.TOP));
addFillComponents(jpanel1,new int[]{ 1,2,3,4,5 },new int[]{ 1,2,3 });
return jpanel1;
}
/**
* Initializer
*/
protected void initializePanel()
{
setLayout(new BorderLayout());
add(createPanel(), BorderLayout.CENTER);
}
}

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