drop launch4j demos, docs, and source
@ -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>
|
@ -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>
|
Before Width: | Height: | Size: 766 B |
@ -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
|
@ -1 +0,0 @@
|
||||
To build the example application set JAVA_HOME and ANT_HOME environment variables.
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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.
|
@ -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>
|
Before Width: | Height: | Size: 766 B |
@ -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>
|
Before Width: | Height: | Size: 4.4 KiB |
@ -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
|
@ -1 +0,0 @@
|
||||
To build the example application set JAVA_HOME and ANT_HOME environment variables.
|
@ -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);
|
||||
}
|
||||
}
|
@ -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...
|
@ -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.
|
@ -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)
|
@ -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;
|
||||
}
|
||||
}
|
@ -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=
|
||||
|
@ -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)
|
@ -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);
|
||||
}
|
||||
}
|
@ -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=
|
||||
|
@ -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
|
||||
);
|
@ -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;
|
||||
}
|
@ -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_
|
@ -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
|
Before Width: | Height: | Size: 51 B |
Before Width: | Height: | Size: 53 B |
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 883 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 912 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 805 B |
Before Width: | Height: | Size: 883 B |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 513 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 906 B |
@ -1,2 +0,0 @@
|
||||
versionNumber=3.0.1.0
|
||||
version=3.0.1
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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");
|
||||
}});
|
||||
}
|
||||
}
|
@ -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/).";
|
||||
}
|
||||
}
|
@ -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 + '!';
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
// }
|
||||
}
|
@ -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("\"", "\"\"");
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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 + '!';
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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
|
@ -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
|
@ -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);
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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 + '!';
|
||||
}
|
||||
}
|
||||
}
|
@ -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());
|
||||
}
|
||||
}
|
@ -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());
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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
|
@ -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
|
@ -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();
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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" });
|
||||
}
|
@ -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 + '!';
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
@ -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
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|