diff --git a/.classpath b/.classpath
deleted file mode 100644
index 512a74ba..00000000
--- a/.classpath
+++ /dev/null
@@ -1,34 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/.directory b/.directory
deleted file mode 100644
index 0a926dd5..00000000
--- a/.directory
+++ /dev/null
@@ -1,4 +0,0 @@
-[Dolphin]
-Timestamp=2015,9,8,20,39,49
-Version=3
-ViewMode=1
diff --git a/.gitignore b/.gitignore
index dc47dc6a..6633be8c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,35 @@
-*.class
+### JetBrains template
+.idea/
/classes*
/product*
-/bin*
+out/
.directory
-.settings
\ No newline at end of file
+.settings
+
+## File-based project format:
+*.iws
+*.iml
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+### Java template
+*.class
+*.log
+# Package Files #
+*.jar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+### Gradle template
+.gradle
+/build/
+
+# Ignore Gradle GUI config
+gradle-app.setting
+
+# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
+!gradle-wrapper.jar
+
+# Cache of project
+.gradletasknamecache
diff --git a/.idea/codeStyleSettings.xml b/.idea/codeStyleSettings.xml
deleted file mode 100644
index c4c95431..00000000
--- a/.idea/codeStyleSettings.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 96cc43ef..9c276ab9 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -1,22 +1,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/.idea/copyright/profiles_settings.xml b/.idea/copyright/profiles_settings.xml
deleted file mode 100644
index 049cafef..00000000
--- a/.idea/copyright/profiles_settings.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/copyright/sdrtrunk.xml b/.idea/copyright/sdrtrunk.xml
deleted file mode 100644
index d2ce33df..00000000
--- a/.idea/copyright/sdrtrunk.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 2c55e21a..05483570 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,43 +1,5 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 071dc2cc..f67d0d5b 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,7 +2,9 @@
-
+
+
+
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
deleted file mode 100644
index e96534fb..00000000
--- a/.idea/uiDesigner.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 0dc6f92c..fef64bf1 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -11,6 +11,6 @@
-
+
\ No newline at end of file
diff --git a/.project b/.project
deleted file mode 100644
index 7accc076..00000000
--- a/.project
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
- sdrtrunk
-
-
-
-
-
- org.eclipse.xtext.ui.shared.xtextBuilder
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
-
- org.eclipse.jdt.core.javanature
- org.eclipse.xtext.ui.shared.xtextNature
-
-
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index a698e596..00000000
--- a/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,12 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/CHANGELOG b/CHANGELOG
index 7ab1b516..89e692b0 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,18 @@
+0.3.3 20171225
+ - Changes build system from ant to gradle. Thanks to: Roman Tsypuk https://github.com/tsypuk
+ - Adds LIST and ID3 metadata to wav audio recordings
-0.3.0-beta1 20170129
+0.3.2 20171105
+ - Resolves issue with tuner frequency adjustments that was causing channel processing
+ to lockup and show persistent 'overflow' state in each channel status
+ - Resolves issue with broadcastify 'mountpoint-in-use' error handling and updates
+ memory usage logging
+ - Resolves issue with Shoutcast 2 login error
+
+0.3.1 20171009
+ - Resolves Java 9 incompatibility issues
+
+0.3.0 20170922
- REQUIRES: Java 8 (or newer) for compatibility and eventual changeover to JavaFX
- FEATURE: audio streaming - adds capability to stream to multiple remote broadcast
servers (Broadcastify, Icecast v2.3 and v2.4+, and Shoutcast V1 and V2). Each
@@ -34,7 +47,7 @@
- Updated Baseband (I/Q) recording at 48 kHz
- Added Airspy tuner support
- New traffic channel pool manager for trunked call following
- - P25 Decoder for C4FM and LSM with trunked call following and audio
+ - P25 Decoder for C4FM and LSM with trunked call following and audio
decoding via the JMBE library
- Updated MPT1327 decoder and trunked call following.
- Updated spectral and waterfall display with zoom (2-64x) and pan and automatic
diff --git a/README.md b/README.md
index f8a2fa96..3b10f06e 100644
--- a/README.md
+++ b/README.md
@@ -8,3 +8,47 @@ A cross-platform java application for decoding, monitoring, recording and stream

**Figure 1:** sdrtrunk **Version 0.3.0** Application Screenshot
+
+# Instructions:
+## Build the project
+Project uses gradle as build system. You can build it with locally installed gradle or if you do not have/want install gradle you can use preconfigured linux/windows wrapper.
+### Build with locally installed gradle 4.3.1
+```
+gradle clean buildSdr
+```
+### Build with preconfigured wrapper for linux/windows
+Linux
+```
+./gradlew clean buildSdr
+```
+Windows
+```
+gradle.bat clean buildSdr
+```
+This would add gradle, download all project dependencies and build JAR
+
+## Development
+All dependencies/versions are controlled from build.gradle.
+To change the new release version tag of artifact - change property:
+```
+version = '0.3.2'
+```
+
+## Run SDRTrunk
+SDRTrunk is packed into single uber-jar file. There is need to have folders with dependecies and
+adding them with classpath. Just run with java.
+### Use Java8
+```
+java -jar build/libs/sdr-trunk-all-0.3.2.jar
+```
+
+## TODO ITEMS
+
+- [x] Move project to gradle build
+- [x] Changed folders structure, based on java project
+- [x] Dependencies are moved to gradle and versions are updated
+- [x] Create uberJAR with all dependencies
+- [ ] Some dependencies left in imports folder. Find them and include into gradle
+- [ ] Move images into resources of project
+- [ ] Add tests to project. This would guarantee that after refactoring part of functionality is not broken
+- [ ] Create modular OOP system (radio-module, gui, web-ui, etc). This would allow to use RADIO modules to call from CLI, GUI or Web UI. And use SDRTrunk as dependency for other projects.
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 00000000..5683c54c
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,73 @@
+buildscript {
+ repositories {
+ jcenter()
+ mavenCentral()
+ }
+ dependencies {
+ }
+}
+
+apply plugin: 'java'
+apply plugin: 'idea'
+
+repositories {
+ jcenter()
+ mavenCentral()
+}
+
+version = '0.3.3-beta.2'
+sourceCompatibility = 1.8
+
+sourceSets {
+ main.java.srcDirs 'src/main'
+ test.java.srcDirs 'src/test'
+}
+
+idea {
+ module {
+ downloadJavadoc = true
+ downloadSources = true
+ }
+}
+
+dependencies {
+ testCompile 'junit:junit:4.12'
+ testCompile 'org.assertj:assertj-core:3.8.0'
+ compile fileTree(dir: 'imports', include: '*.jar')
+ compile 'org.apache.commons:commons-lang3:3.7'
+ compile 'org.apache.commons:commons-io:1.3.2'
+ compile 'org.slf4j:slf4j-api:1.7.25'
+ compile 'ch.qos.logback:logback-core:1.2.3'
+ compile 'ch.qos.logback:logback-classic:1.2.3'
+ compile 'com.miglayout:miglayout-swing:5.0'
+
+ compile 'org.usb4java:usb4java-javax:1.2.0'
+ compile 'org.usb4java:usb4java:1.2.0'
+ compile 'org.usb4java:libusb4java:1.2.0'
+ compile 'javax.usb:usb-api:1.0.2'
+ compile 'com.github.wendykierp:JTransforms:3.1'
+ compile 'pl.edu.icm:JLargeArrays:1.6'
+ compile 'net.coderazzi:tablefilter-swing:5.3.1'
+ compile 'com.jidesoft:jide-oss:3.4.3'
+ compile 'org.apache.mina:mina-core:2.0.16'
+ compile 'org.apache.mina:mina-http:2.0.16'
+ compile 'org.apache.axis:axis-jaxrpc:1.4'
+ compile 'org.apache.axis:axis:1.4'
+ compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.9.3'
+}
+
+task wrapper(type: Wrapper) {
+ gradleVersion = '4.3.1'
+}
+
+task buildSdr(type: Jar) {
+ manifest {
+ attributes 'Implementation-Title': 'SdrTrunk project',
+ 'Implementation-Version': version,
+ 'Main-Class': 'io.github.dsheirer.gui.SDRTrunk',
+ 'Class-Path': 'jmbe-0.3.2.jar jmbe-0.3.3.jar'
+ }
+ baseName = project.name + '-all'
+ from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
+ with jar
+}
diff --git a/build/build.xml b/build/build.xml
deleted file mode 100644
index e9f50f4c..00000000
--- a/build/build.xml
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
- Ant build script for SDRTrunk Decoder Application
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/config/logback.xml b/config/logback.xml
deleted file mode 100644
index 9fe5f368..00000000
--- a/config/logback.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
- ${user.home}/SDRTrunk/logs/sdrtrunk_app.log
-
-
- ${user.home}/SDRTrunk/logs/%d{yyyyMMdd}_sdrtrunk_app.log
- 10
-
-
- %-25(%d{yyyyMMdd HHmmss.SSS} [%thread]) %-5level %logger{30} - %msg%n
-
-
-
-
-
-
-
-
-
- %-12(%d{HH:mm:ss.SSS}) %-5level %logger{25} - %msg%n
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..6b6ea3ab
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..34c937c9
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.3.1-bin.zip
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStorePath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
new file mode 100755
index 00000000..cccdd3d5
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 00000000..e95643d6
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/images/.directory b/images/.directory
deleted file mode 100644
index 4d114620..00000000
--- a/images/.directory
+++ /dev/null
@@ -1,4 +0,0 @@
-[Dolphin]
-PreviewsShown=true
-Timestamp=2013,9,20,8,54,21
-Version=3
diff --git a/imports/.directory b/imports/.directory
deleted file mode 100644
index 2154816a..00000000
--- a/imports/.directory
+++ /dev/null
@@ -1,4 +0,0 @@
-[Dolphin]
-Timestamp=2013,4,7,10,12,39
-Version=3
-ViewMode=1
diff --git a/imports/JLargeArrays-1.2.jar b/imports/JLargeArrays-1.2.jar
deleted file mode 100644
index 7be7a5da..00000000
Binary files a/imports/JLargeArrays-1.2.jar and /dev/null differ
diff --git a/imports/JTransforms-3.0.jar b/imports/JTransforms-3.0.jar
deleted file mode 100644
index 9cc2e3f3..00000000
Binary files a/imports/JTransforms-3.0.jar and /dev/null differ
diff --git a/imports/activation-1.1.jar b/imports/activation-1.1.jar
deleted file mode 100644
index 53f82a1c..00000000
Binary files a/imports/activation-1.1.jar and /dev/null differ
diff --git a/imports/axis.jar b/imports/axis.jar
deleted file mode 100644
index 20b09a59..00000000
Binary files a/imports/axis.jar and /dev/null differ
diff --git a/imports/commons-codec-1.9.jar b/imports/commons-codec-1.9.jar
deleted file mode 100644
index ef35f1c5..00000000
Binary files a/imports/commons-codec-1.9.jar and /dev/null differ
diff --git a/imports/commons-discovery-0.2.jar b/imports/commons-discovery-0.2.jar
deleted file mode 100644
index b8855484..00000000
Binary files a/imports/commons-discovery-0.2.jar and /dev/null differ
diff --git a/imports/commons-io-2.4.jar b/imports/commons-io-2.4.jar
deleted file mode 100644
index 90035a4f..00000000
Binary files a/imports/commons-io-2.4.jar and /dev/null differ
diff --git a/imports/commons-lang3-3.2.1.jar b/imports/commons-lang3-3.2.1.jar
deleted file mode 100644
index 6bf4f93c..00000000
Binary files a/imports/commons-lang3-3.2.1.jar and /dev/null differ
diff --git a/imports/commons-logging-1.2.jar b/imports/commons-logging-1.2.jar
deleted file mode 100644
index 93a3b9f6..00000000
Binary files a/imports/commons-logging-1.2.jar and /dev/null differ
diff --git a/imports/java-mail-1.4.jar b/imports/java-mail-1.4.jar
deleted file mode 100644
index e6f70832..00000000
Binary files a/imports/java-mail-1.4.jar and /dev/null differ
diff --git a/imports/javassist-3.20.0-GA.jar b/imports/javassist-3.20.0-GA.jar
deleted file mode 100644
index 0f1ff725..00000000
Binary files a/imports/javassist-3.20.0-GA.jar and /dev/null differ
diff --git a/imports/jaxrpc.jar b/imports/jaxrpc.jar
deleted file mode 100644
index a2c13d9a..00000000
Binary files a/imports/jaxrpc.jar and /dev/null differ
diff --git a/imports/jide-oss-3.5.15.jar b/imports/jide-oss-3.5.15.jar
deleted file mode 100644
index 18b5acfa..00000000
Binary files a/imports/jide-oss-3.5.15.jar and /dev/null differ
diff --git a/imports/jsr80-1.0.1.jar b/imports/jsr80-1.0.1.jar
deleted file mode 100644
index ead7cbef..00000000
Binary files a/imports/jsr80-1.0.1.jar and /dev/null differ
diff --git a/imports/libusb4java-1.2.0-linux-aarch64.jar b/imports/libusb4java-1.2.0-linux-aarch64.jar
deleted file mode 100644
index 61a2e742..00000000
Binary files a/imports/libusb4java-1.2.0-linux-aarch64.jar and /dev/null differ
diff --git a/imports/libusb4java-1.2.0-linux-arm.jar b/imports/libusb4java-1.2.0-linux-arm.jar
deleted file mode 100644
index cb29774c..00000000
Binary files a/imports/libusb4java-1.2.0-linux-arm.jar and /dev/null differ
diff --git a/imports/libusb4java-1.2.0-linux-ppc.jar b/imports/libusb4java-1.2.0-linux-ppc.jar
deleted file mode 100644
index f094b27d..00000000
Binary files a/imports/libusb4java-1.2.0-linux-ppc.jar and /dev/null differ
diff --git a/imports/libusb4java-1.2.0-linux-x86.jar b/imports/libusb4java-1.2.0-linux-x86.jar
deleted file mode 100644
index 16ac5385..00000000
Binary files a/imports/libusb4java-1.2.0-linux-x86.jar and /dev/null differ
diff --git a/imports/libusb4java-1.2.0-linux-x86_64.jar b/imports/libusb4java-1.2.0-linux-x86_64.jar
deleted file mode 100644
index 4652525e..00000000
Binary files a/imports/libusb4java-1.2.0-linux-x86_64.jar and /dev/null differ
diff --git a/imports/libusb4java-1.2.0-osx-x86.jar b/imports/libusb4java-1.2.0-osx-x86.jar
deleted file mode 100644
index d4168ca5..00000000
Binary files a/imports/libusb4java-1.2.0-osx-x86.jar and /dev/null differ
diff --git a/imports/libusb4java-1.2.0-osx-x86_64.jar b/imports/libusb4java-1.2.0-osx-x86_64.jar
deleted file mode 100644
index c2d4e2c5..00000000
Binary files a/imports/libusb4java-1.2.0-osx-x86_64.jar and /dev/null differ
diff --git a/imports/libusb4java-1.2.0-windows-x86.jar b/imports/libusb4java-1.2.0-windows-x86.jar
deleted file mode 100644
index 58461996..00000000
Binary files a/imports/libusb4java-1.2.0-windows-x86.jar and /dev/null differ
diff --git a/imports/libusb4java-1.2.0-windows-x86_64.jar b/imports/libusb4java-1.2.0-windows-x86_64.jar
deleted file mode 100644
index 56b9d657..00000000
Binary files a/imports/libusb4java-1.2.0-windows-x86_64.jar and /dev/null differ
diff --git a/imports/logback-classic-1.1.2.jar b/imports/logback-classic-1.1.2.jar
deleted file mode 100644
index 3d5d0fff..00000000
Binary files a/imports/logback-classic-1.1.2.jar and /dev/null differ
diff --git a/imports/logback-core-1.1.2.jar b/imports/logback-core-1.1.2.jar
deleted file mode 100644
index 575aec5e..00000000
Binary files a/imports/logback-core-1.1.2.jar and /dev/null differ
diff --git a/imports/miglayout-4.0-swing.jar b/imports/miglayout-4.0-swing.jar
deleted file mode 100644
index 7b6a22ca..00000000
Binary files a/imports/miglayout-4.0-swing.jar and /dev/null differ
diff --git a/imports/mina-core-2.0.16.jar b/imports/mina-core-2.0.16.jar
deleted file mode 100644
index 0e6d9883..00000000
Binary files a/imports/mina-core-2.0.16.jar and /dev/null differ
diff --git a/imports/mina-http-2.0.16.jar b/imports/mina-http-2.0.16.jar
deleted file mode 100644
index 62a5efcc..00000000
Binary files a/imports/mina-http-2.0.16.jar and /dev/null differ
diff --git a/imports/slf4j-api-1.7.21.jar b/imports/slf4j-api-1.7.21.jar
deleted file mode 100644
index 2a5c33ec..00000000
Binary files a/imports/slf4j-api-1.7.21.jar and /dev/null differ
diff --git a/imports/tablefilter-swing-5.2.1.jar b/imports/tablefilter-swing-5.2.1.jar
deleted file mode 100644
index a7d26029..00000000
Binary files a/imports/tablefilter-swing-5.2.1.jar and /dev/null differ
diff --git a/imports/usb-api-1.0.2.jar b/imports/usb-api-1.0.2.jar
deleted file mode 100644
index 7abd6f70..00000000
Binary files a/imports/usb-api-1.0.2.jar and /dev/null differ
diff --git a/imports/usb4java-1.2.0.jar b/imports/usb4java-1.2.0.jar
deleted file mode 100644
index fa6128d7..00000000
Binary files a/imports/usb4java-1.2.0.jar and /dev/null differ
diff --git a/imports/usb4java-javax-1.2.0.jar b/imports/usb4java-javax-1.2.0.jar
deleted file mode 100644
index 9c2ba2a5..00000000
Binary files a/imports/usb4java-javax-1.2.0.jar and /dev/null differ
diff --git a/scripts/run_sdrtrunk_linux.sh b/scripts/run_sdrtrunk_linux.sh
deleted file mode 100755
index b0d2ff65..00000000
--- a/scripts/run_sdrtrunk_linux.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-java -version
-
-# Test for java version 9
-JAVA_9=$(java -version 2>&1 | grep -i version | sed 's/.* "\([9]\).*/\1/')
-
-if [ -z ${JAVA_9+x} ]; then
- echo Using Java 9 program options
- # Java 9 uses the G1 garbage collector by default and requires that we specify the
- # java.xml.bind package since it's been removed from the java se core library
- java -cp "*:libs/*" --add-modules java.xml.bind gui.SDRTrunk;
-else
- echo Using Java 8 program options
- java -XX:+UseG1GC -cp "*:libs/*" gui.SDRTrunk;
-fi
diff --git a/scripts/run_sdrtrunk_windows.bat b/scripts/run_sdrtrunk_windows.bat
deleted file mode 100644
index 1c38bd44..00000000
--- a/scripts/run_sdrtrunk_windows.bat
+++ /dev/null
@@ -1,25 +0,0 @@
-@echo off
-
-java -version
-
-SETLOCAL ENABLEDELAYEDEXPANSION
-
-for /f "usebackq tokens=3" %%a in (`java -version 2^>^&1 ^| find "version"`) do (
- rem set b to the unquoted version string parsed from the java version command
- set b=%%~a
-
- rem set c to the first character of the unquoted version string
- set c=!b:~0,1!
-
- if !c! equ 9 (
- echo Using Java 9 options
- java -cp "SDRTrunk.jar;*;libs/*;config/*;images/*" --add-modules java.xml.bind gui.SDRTrunk
- ) else (
- echo Using Java 8 options
- java -XX:+UseG1GC -cp "SDRTrunk.jar;*;libs/*;config/*;images/*" gui.SDRTrunk
- )
-)
-
-ENDLOCAL
-
-@echo on
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 00000000..e592e50e
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = 'sdr-trunk'
\ No newline at end of file
diff --git a/src/.directory b/src/.directory
deleted file mode 100644
index a931c4fe..00000000
--- a/src/.directory
+++ /dev/null
@@ -1,4 +0,0 @@
-[Dolphin]
-Timestamp=2015,9,1,6,42,59
-Version=3
-ViewMode=1
diff --git a/src/alias/Alias.java b/src/alias/Alias.java
deleted file mode 100644
index 8f8b5ba5..00000000
--- a/src/alias/Alias.java
+++ /dev/null
@@ -1,354 +0,0 @@
-/*******************************************************************************
- * SDR Trunk
- * Copyright (C) 2014-2016 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- ******************************************************************************/
-package alias;
-
-import java.awt.Color;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.TreeSet;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlSeeAlso;
-import javax.xml.bind.annotation.XmlTransient;
-
-import alias.action.AliasAction;
-import alias.id.AliasID;
-import alias.id.AliasIDType;
-import alias.id.broadcast.BroadcastChannel;
-import alias.id.nonrecordable.NonRecordable;
-import alias.id.priority.Priority;
-
-@XmlSeeAlso( { AliasID.class, AliasAction.class } )
-@XmlRootElement( name = "alias" )
-public class Alias
-{
- private String mList;
- private String mGroup;
- private String mName;
- private int mColor;
- private String mIconName;
- private List mAliasIDs = new ArrayList();
- private List mAliasActions = new ArrayList();
-
- public Alias()
- {
- }
-
- public Alias( String name )
- {
- mName = name;
- }
-
- public String toString()
- {
- return getName();
- }
-
- @XmlAttribute( name="name" )
- public String getName()
- {
- return mName;
- }
-
- public void setName( String name )
- {
- mName = name;
- }
-
- @XmlAttribute( name="list" )
- public String getList()
- {
- return mList;
- }
-
- public void setList( String list )
- {
- mList = list;
- }
-
- public boolean hasList()
- {
- return mList != null;
- }
-
- @XmlAttribute( name="group" )
- public String getGroup()
- {
- return mGroup;
- }
-
- public void setGroup( String group )
- {
- mGroup = group;
- }
-
- public boolean hasGroup()
- {
- return mGroup != null;
- }
-
- @XmlAttribute
- public int getColor()
- {
- return mColor;
- }
-
- public void setColor( int color )
- {
- mColor = color;
- }
-
- public Color getDisplayColor()
- {
- return new Color( getColor() );
- }
-
- @XmlAttribute
- public String getIconName()
- {
- return mIconName;
- }
-
- public void setIconName( String iconName )
- {
- mIconName = iconName;
- }
-
- @XmlElement( name="id" )
- public List getId()
- {
- return mAliasIDs;
- }
-
- public void setId( ArrayList id )
- {
- mAliasIDs = id;
- }
-
- public void addAliasID( AliasID id )
- {
- mAliasIDs.add( id );
- }
-
- public void removeAliasID( AliasID id )
- {
- mAliasIDs.remove( id );
- }
-
- @XmlElement( name="action" )
- public List getAction()
- {
- return mAliasActions;
- }
-
- public void setAction( List actions )
- {
- mAliasActions = actions;
- }
-
- public void addAliasAction( AliasAction action )
- {
- mAliasActions.add( action );
- }
-
- public void removeAliasAction( AliasAction action )
- {
- mAliasActions.remove( action );
- }
-
- public boolean hasActions()
- {
- return !mAliasActions.isEmpty();
- }
-
- /**
- * Perform any validation/cleanup actions on this alias.
- */
- public void validate()
- {
- }
- /**
- * Returns the priority level of this alias, if defined, or the default priority
- */
- @XmlTransient
- public int getCallPriority()
- {
- for( AliasID id: mAliasIDs )
- {
- if( id.getType() == AliasIDType.PRIORITY)
- {
- return ((Priority)id).getPriority();
- }
- }
-
- return Priority.DEFAULT_PRIORITY;
- }
-
- public boolean hasCallPriority()
- {
- for( AliasID id: mAliasIDs )
- {
- if( id.getType() == AliasIDType.PRIORITY)
- {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Sets or updates the call priority
- */
- public void setCallPriority( int priority )
- {
- if( priority == Priority.DO_NOT_MONITOR ||
- ( Priority.MIN_PRIORITY <= priority && priority <= Priority.MAX_PRIORITY ) )
- {
- for( AliasID id: mAliasIDs )
- {
- if( id.getType() == AliasIDType.PRIORITY)
- {
- ((Priority)id).setPriority( priority );
- return;
- }
- }
-
- //If we don't find a priority id, create one
- Priority p = new Priority();
- p.setPriority( priority );
- addAliasID( p );
- }
- }
-
- /**
- * Inspects the alias for a non-recordable alias id. Default is true;
- */
- @XmlTransient
- public boolean isRecordable()
- {
- for( AliasID id: getId() )
- {
- if( id.getType() == AliasIDType.NON_RECORDABLE)
- {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Sets or removes the non-recordable alias ID for this alias.
- */
- public void setRecordable( boolean recordable )
- {
- if( recordable )
- {
- AliasID toRemove = null;
-
- for( AliasID id: getId() )
- {
- if( id.getType() == AliasIDType.NON_RECORDABLE)
- {
- toRemove = id;
- break;
- }
- }
-
- if( toRemove != null )
- {
- removeAliasID( toRemove );
- }
- }
- else
- {
- for( AliasID id: getId() )
- {
- if( id.getType() == AliasIDType.NON_RECORDABLE)
- {
- return;
- }
- }
-
- addAliasID( new NonRecordable() );
- }
- }
-
- /**
- * Inspects the alias for broadcast channel/streamable alias ids. Default is false;
- */
- @XmlTransient
- public boolean isStreamable()
- {
- for( AliasID id: getId() )
- {
- if( id.getType() == AliasIDType.BROADCAST_CHANNEL)
- {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * List of broadcast channels specified for this alias.
- */
- @XmlTransient
- public Set getBroadcastChannels()
- {
- Set broadcastChannels = new TreeSet<>();
-
- for(AliasID id: getId())
- {
- if(id.getType() == AliasIDType.BROADCAST_CHANNEL)
- {
- broadcastChannels.add((BroadcastChannel)id);
- }
- }
-
- return broadcastChannels;
- }
-
- /**
- * Indicates if this alias contains a broadcast channel alias id with the channel name.
- */
- public boolean hasBroadcastChannel(String channel)
- {
- if(channel == null || channel.isEmpty())
- {
- return false;
- }
-
- for(AliasID id: getId())
- {
- if(id.getType() == AliasIDType.BROADCAST_CHANNEL &&
- ((BroadcastChannel)id).getChannelName().contentEquals(channel))
- {
- return true;
- }
- }
-
- return false;
- }
-}
diff --git a/src/alias/action/AliasAction.java b/src/alias/action/AliasAction.java
deleted file mode 100644
index c353da28..00000000
--- a/src/alias/action/AliasAction.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * sdrtrunk
- * Copyright (C) 2014-2017 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- *
- ******************************************************************************/
-package alias.action;
-
-import alias.Alias;
-import alias.action.beep.BeepAction;
-import alias.action.clip.ClipAction;
-import alias.action.script.ScriptAction;
-import message.Message;
-
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlSeeAlso;
-import javax.xml.bind.annotation.XmlTransient;
-import java.util.concurrent.ScheduledExecutorService;
-
-/**
- * Alias action defines an action to execute when an alias is detected active.
- */
-@XmlSeeAlso( { BeepAction.class, ClipAction.class, ScriptAction.class } )
-@XmlRootElement( name = "action" )
-public abstract class AliasAction
-{
- public AliasAction()
- {
- }
-
- @XmlTransient
- public abstract AliasActionType getType();
-
- /**
- * Task to execute when an alias action is defined. The message argument is
- * the original message containing one or more aliases that have an alias
- * action attached. The alias argument is the parent alias containing the
- * alias action.
- */
- public abstract void execute( ScheduledExecutorService scheduledExecutorService, Alias alias, Message message );
-
- /**
- * Dismiss a persistent alias action
- */
- public abstract void dismiss( boolean reset );
-}
diff --git a/src/alias/action/beep/BeepAction.java b/src/alias/action/beep/BeepAction.java
deleted file mode 100644
index 65ebd2bd..00000000
--- a/src/alias/action/beep/BeepAction.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package alias.action.beep;
-
-import message.Message;
-import alias.Alias;
-import alias.action.AliasActionType;
-import alias.action.RecurringAction;
-
-public class BeepAction extends RecurringAction
-{
-
- @Override
- public AliasActionType getType()
- {
- return AliasActionType.BEEP;
- }
-
- @Override
- public void performAction( Alias alias, Message message )
- {
- System.out.println( "\007" );
- }
-
- @Override
- public String toString()
- {
- return "Beep";
- }
-}
diff --git a/src/alias/action/clip/ClipAction.java b/src/alias/action/clip/ClipAction.java
deleted file mode 100644
index dd338d96..00000000
--- a/src/alias/action/clip/ClipAction.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package alias.action.clip;
-
-import java.io.File;
-
-import javax.sound.sampled.AudioInputStream;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.Clip;
-import javax.xml.bind.annotation.XmlTransient;
-
-import message.Message;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import alias.Alias;
-import alias.action.AliasActionType;
-import alias.action.RecurringAction;
-
-public class ClipAction extends RecurringAction
-{
- private final static Logger mLog = LoggerFactory.getLogger( ClipAction.class );
-
- private String mFilePath;
-
- @XmlTransient
- private Clip mClip;
-
- public ClipAction()
- {
- }
-
- @Override
- public AliasActionType getType()
- {
- return AliasActionType.CLIP;
- }
-
- public String getPath()
- {
- return mFilePath;
- }
-
- public void setPath( String path )
- {
- mFilePath = path;
- }
-
- @Override
- public void performAction( Alias alias, Message message )
- {
- try
- {
- play();
- }
- catch( Exception e )
- {
- mLog.error( "Couldn't play audio clip", e );
- }
- }
-
- public void play() throws Exception
- {
- try
- {
- if( mFilePath != null )
- {
- if( mClip == null )
- {
- mClip = AudioSystem.getClip();
-
- AudioInputStream ais =
- AudioSystem.getAudioInputStream( new File( mFilePath ) );
-
- mClip.open( ais );
- }
-
- if( mClip.isRunning() )
- {
- mClip.stop();
- }
-
- mClip.setFramePosition( 0 );
-
- mClip.start();
- }
- }
- catch( Exception e )
- {
- mClip = null;
-
- mLog.error( "Error playing sound clip [" + mFilePath + "] - " + e.getMessage() );
-
- throw e;
- }
- }
-
-
- @Override
- public String toString()
- {
- if( mFilePath == null )
- {
- return "Play Clip";
- }
- else
- {
- return "Play Clip: " + mFilePath;
- }
- }
-}
diff --git a/src/alias/action/script/ScriptAction.java b/src/alias/action/script/ScriptAction.java
deleted file mode 100644
index 8dcfb55f..00000000
--- a/src/alias/action/script/ScriptAction.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package alias.action.script;
-
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-
-import message.Message;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import alias.Alias;
-import alias.action.AliasActionType;
-import alias.action.RecurringAction;
-
-public class ScriptAction extends RecurringAction
-{
- private final static Logger mLog = LoggerFactory.getLogger( ScriptAction.class );
-
- private String mScript;
-
- public ScriptAction()
- {
- }
-
- @Override
- public AliasActionType getType()
- {
- return AliasActionType.SCRIPT;
- }
-
- public String getScript()
- {
- return mScript;
- }
-
- public void setScript( String script )
- {
- mScript = script;
- }
-
- @Override
- public void performAction( Alias alias, Message message )
- {
- try
- {
- play();
- }
- catch( Exception e )
- {
- mLog.error( "Couldn't execute script [" + mScript + "]", e );
- }
- }
-
- public void play() throws Exception
- {
- if( mScript != null )
- {
- ProcessBuilder pb = new ProcessBuilder( mScript );
-
- pb.redirectErrorStream( true );
-
- Process p = pb.start();
-
- int exitCode = p.waitFor();
-
- BufferedReader reader = new BufferedReader(
- new InputStreamReader( p.getInputStream() ) );
-
- String line = "";
-
- StringBuilder sb = new StringBuilder();
-
- while( ( line = reader.readLine() ) != null )
- {
- sb.append(line + "\n");
- }
-
- if( exitCode != 0 )
- {
- throw new RuntimeException( "Exit Code: " + exitCode +
- " Console:" + sb.toString() );
- }
- }
- }
-
- @Override
- public String toString()
- {
- if( mScript == null )
- {
- return "Run Script";
- }
- else
- {
- return "Run Script: " + mScript;
- }
- }
-}
diff --git a/src/alias/id/AliasID.java b/src/alias/id/AliasID.java
deleted file mode 100644
index 25eff7d5..00000000
--- a/src/alias/id/AliasID.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*******************************************************************************
- * SDR Trunk
- * Copyright (C) 2014-2016 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- ******************************************************************************/
-package alias.id;
-
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlSeeAlso;
-import javax.xml.bind.annotation.XmlTransient;
-
-import alias.id.broadcast.BroadcastChannel;
-import playlist.version1.Group;
-import alias.id.esn.Esn;
-import alias.id.fleetsync.FleetsyncID;
-import alias.id.lojack.LoJackFunctionAndID;
-import alias.id.mdc.MDC1200ID;
-import alias.id.mobileID.Min;
-import alias.id.mpt1327.MPT1327ID;
-import alias.id.nonrecordable.NonRecordable;
-import alias.id.priority.Priority;
-import alias.id.siteID.SiteID;
-import alias.id.status.StatusID;
-import alias.id.talkgroup.TalkgroupID;
-import alias.id.uniqueID.UniqueID;
-
-@SuppressWarnings( "deprecation" )
-@XmlSeeAlso( {BroadcastChannel.class, Esn.class, FleetsyncID.class, Group.class, LoJackFunctionAndID.class,
- MDC1200ID.class, Min.class, MPT1327ID.class, NonRecordable.class,
- Priority.class, SiteID.class, StatusID.class, TalkgroupID.class,
- UniqueID.class } )
-@XmlRootElement( name = "id" )
-public abstract class AliasID
-{
- public AliasID()
- {
- }
-
- public abstract AliasIDType getType();
-
- public abstract boolean matches( AliasID id );
-
- @XmlTransient
- public abstract boolean isValid();
-}
diff --git a/src/alias/id/lojack/LoJackFunctionAndID.java b/src/alias/id/lojack/LoJackFunctionAndID.java
deleted file mode 100644
index f2cc8c80..00000000
--- a/src/alias/id/lojack/LoJackFunctionAndID.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*******************************************************************************
- * SDR Trunk
- * Copyright (C) 2015 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- ******************************************************************************/
-package alias.id.lojack;
-
-import javax.xml.bind.annotation.XmlAttribute;
-
-import module.decode.lj1200.LJ1200Message;
-import module.decode.lj1200.LJ1200Message.Function;
-import alias.id.AliasID;
-import alias.id.AliasIDType;
-
-public class LoJackFunctionAndID extends AliasID
-{
- private LJ1200Message.Function mFunction = Function.F0_UNKNOWN;
- private String mID = "*****";
-
- public LoJackFunctionAndID()
- {
- }
-
- @XmlAttribute( name="id" )
- public String getID()
- {
- return mID;
- }
-
- public void setID( String id )
- {
- mID = id;
- }
-
- @XmlAttribute( name="function" )
- public Function getFunction()
- {
- return mFunction;
- }
-
- public void setFunction( Function function )
- {
- mFunction = function;
- }
-
- @Override
- public boolean isValid()
- {
- return mFunction != null && mID != null;
- }
-
- public String toString()
- {
- return "LoJack FUNC: " + mFunction.getLabel() + " ID:" + ( mID == null ? "" : mID );
- }
-
- /**
- * Indicates if the function and id combination match this alias id
- */
- public boolean matches( Function function, String id )
- {
- return mFunction == function &&
- mID != null &&
- id != null &&
- id.matches( mID.replace( "*", ".?" ) );
- }
-
- @Override
- public boolean matches( AliasID id )
- {
- boolean retVal = false;
-
- if( mID != null && id instanceof LoJackFunctionAndID )
- {
- LoJackFunctionAndID otherLojack = (LoJackFunctionAndID)id;
-
- if( otherLojack.getFunction() == mFunction )
- {
- //Create a pattern - replace * wildcards with regex single-char wildcard
- String pattern = mID.replace( "*", ".?" );
-
- retVal = otherLojack.getID().matches( pattern );
- }
- }
-
- return retVal;
- }
-
- @Override
- public AliasIDType getType()
- {
- return AliasIDType.LOJACK;
- }
-
- @Override
- public int hashCode()
- {
- final int prime = 31;
- int result = 1;
- result = prime * result
- + ( ( mFunction == null ) ? 0 : mFunction.hashCode() );
- result = prime * result + ( ( mID == null ) ? 0 : mID.hashCode() );
- return result;
- }
-
- @Override
- public boolean equals( Object obj )
- {
- if ( this == obj )
- return true;
- if ( obj == null )
- return false;
- if ( getClass() != obj.getClass() )
- return false;
- LoJackFunctionAndID other = (LoJackFunctionAndID) obj;
- if ( mFunction != other.mFunction )
- return false;
- if ( mID == null )
- {
- if ( other.mID != null )
- return false;
- } else if ( !mID.equals( other.mID ) )
- return false;
- return true;
- }
-}
diff --git a/src/alias/id/mdc/MDC1200ID.java b/src/alias/id/mdc/MDC1200ID.java
deleted file mode 100644
index 731b1153..00000000
--- a/src/alias/id/mdc/MDC1200ID.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*******************************************************************************
- * SDR Trunk
- * Copyright (C) 2014 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- ******************************************************************************/
-package alias.id.mdc;
-
-import javax.xml.bind.annotation.XmlAttribute;
-
-import alias.id.AliasID;
-import alias.id.AliasIDType;
-
-
-public class MDC1200ID extends AliasID
-{
- private String mID;
-
- public MDC1200ID()
- {
- }
-
- @XmlAttribute
- public String getIdent()
- {
- return mID;
- }
-
- public void setIdent( String ident )
- {
- mID = ident;
- }
-
- @Override
- public boolean isValid()
- {
- return mID != null;
- }
-
- public String toString()
- {
- return "MDC-1200: " + mID;
- }
-
- @Override
- public boolean matches( AliasID id )
- {
- boolean retVal = false;
-
- if( mID != null && id instanceof MDC1200ID )
- {
- MDC1200ID tgid = (MDC1200ID)id;
-
- //Create a pattern - replace * wildcards with regex single-char wildcard
- String pattern = mID.replace( "*", ".?" );
-
- retVal = tgid.getIdent().matches( pattern );
- }
-
- return retVal;
- }
-
- @Override
- public AliasIDType getType()
- {
- return AliasIDType.MDC1200;
- }
-}
diff --git a/src/alias/id/mobileID/Min.java b/src/alias/id/mobileID/Min.java
deleted file mode 100644
index bba33fdd..00000000
--- a/src/alias/id/mobileID/Min.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*******************************************************************************
- * SDR Trunk
- * Copyright (C) 2014 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- ******************************************************************************/
-package alias.id.mobileID;
-
-import javax.xml.bind.annotation.XmlAttribute;
-
-import alias.id.AliasID;
-import alias.id.AliasIDType;
-
-/**
- * Mobile ID Number
- */
-public class Min extends AliasID
-{
- private String mMin;
-
- public Min()
- {
- }
-
- @XmlAttribute
- public String getMin()
- {
- return mMin;
- }
-
- public void setMin( String min )
- {
- mMin = min;
- }
-
- @Override
- public boolean isValid()
- {
- return mMin != null;
- }
-
- public String toString()
- {
- return "MIN: " + mMin;
- }
-
- @Override
- public boolean matches( AliasID id )
- {
- boolean retVal = false;
-
- if( mMin != null && id instanceof Min )
- {
- Min min = (Min)id;
-
- //Create a pattern - replace * wildcards with regex single-char wildcard
- String pattern = mMin.replace( "*", ".?" );
-
- retVal = min.getMin().matches( pattern );
- }
-
- return retVal;
- }
-
- @Override
- public AliasIDType getType()
- {
- return AliasIDType.MIN;
- }
-}
diff --git a/src/alias/id/mpt1327/MPT1327ID.java b/src/alias/id/mpt1327/MPT1327ID.java
deleted file mode 100644
index 12b45d52..00000000
--- a/src/alias/id/mpt1327/MPT1327ID.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*******************************************************************************
- * SDR Trunk
- * Copyright (C) 2014 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- ******************************************************************************/
-package alias.id.mpt1327;
-
-import javax.xml.bind.annotation.XmlAttribute;
-
-import alias.id.AliasID;
-import alias.id.AliasIDType;
-
-public class MPT1327ID extends AliasID
-{
- private String mID;
-
- public MPT1327ID()
- {
- }
-
- @XmlAttribute
- public String getIdent()
- {
- return mID;
- }
-
- public void setIdent( String ident )
- {
- mID = ident;
- }
-
- @Override
- public boolean isValid()
- {
- return mID != null;
- }
-
- public String toString()
- {
- return "MPT-1327: " + mID;
- }
-
- @Override
- public boolean matches( AliasID id )
- {
- boolean retVal = false;
-
- if( mID != null && id instanceof MPT1327ID )
- {
- MPT1327ID tgid = (MPT1327ID)id;
-
- //Create a pattern - replace * wildcards with regex single-char wildcard
- String pattern = mID.replace( "*", ".?" );
-
- retVal = tgid.getIdent().matches( pattern );
- }
-
- return retVal;
- }
-
- @Override
- public AliasIDType getType()
- {
- return AliasIDType.MPT1327;
- }
-}
diff --git a/src/alias/id/nonrecordable/NonRecordable.java b/src/alias/id/nonrecordable/NonRecordable.java
deleted file mode 100644
index c881c360..00000000
--- a/src/alias/id/nonrecordable/NonRecordable.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package alias.id.nonrecordable;
-
-import alias.id.AliasID;
-import alias.id.AliasIDType;
-
-public class NonRecordable extends AliasID
-{
- @Override
- public AliasIDType getType()
- {
- return AliasIDType.NON_RECORDABLE;
- }
-
- @Override
- public boolean isValid()
- {
- return true;
- }
-
- @Override
- public boolean matches( AliasID id )
- {
- return false;
- }
-
- @Override
- public String toString()
- {
- return "Audio Non-Recordable";
- }
-}
diff --git a/src/alias/id/priority/Priority.java b/src/alias/id/priority/Priority.java
deleted file mode 100644
index 9243db45..00000000
--- a/src/alias/id/priority/Priority.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*******************************************************************************
- * SDR Trunk
- * Copyright (C) 2014 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- ******************************************************************************/
-package alias.id.priority;
-
-import javax.xml.bind.annotation.XmlAttribute;
-
-import alias.id.AliasID;
-import alias.id.AliasIDType;
-
-/**
- * Specifies an (audio) priority level for this alias.
- */
-public class Priority extends AliasID
-{
- public static final int DO_NOT_MONITOR = -1;
- public static final int SELECTED_PRIORITY = 0;
- public static final int MIN_PRIORITY = 1;
- public static final int MAX_PRIORITY = 100;
- public static final int DEFAULT_PRIORITY = 100;
-
- private int mPriority = DEFAULT_PRIORITY;
-
- public Priority()
- {
- }
-
- @Override
- public boolean isValid()
- {
- return true;
- }
-
- /**
- * Indicates the associated alias should not be monitored or tracked.
- */
- public boolean isDoNotMonitor()
- {
- return mPriority == DO_NOT_MONITOR;
- }
-
- @XmlAttribute
- public int getPriority()
- {
- return mPriority;
- }
-
- public void setPriority( int priority )
- {
- mPriority = priority;
- }
-
- public String toString()
- {
- return "Audio Priority: " + ( isDoNotMonitor() ? "Do Not Monitor" : mPriority );
- }
-
- @Override
- public boolean matches( AliasID id )
- {
- return false;
- }
-
- @Override
- public AliasIDType getType()
- {
- return AliasIDType.PRIORITY;
- }
-}
diff --git a/src/alias/id/siteID/SiteID.java b/src/alias/id/siteID/SiteID.java
deleted file mode 100644
index a16008e1..00000000
--- a/src/alias/id/siteID/SiteID.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*******************************************************************************
- * SDR Trunk
- * Copyright (C) 2014 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- ******************************************************************************/
-package alias.id.siteID;
-
-import javax.xml.bind.annotation.XmlAttribute;
-
-import alias.id.AliasID;
-import alias.id.AliasIDType;
-
-public class SiteID extends AliasID
-{
- private String mSite;
-
- public SiteID()
- {
- }
-
- @XmlAttribute
- public String getSite()
- {
- return mSite;
- }
-
- public void setSite( String site )
- {
- mSite = site;
- }
-
- @Override
- public boolean isValid()
- {
- return mSite != null;
- }
-
- public String toString()
- {
- return "Site: " + mSite;
- }
-
- @Override
- public boolean matches( AliasID otherID )
- {
- return otherID != null &&
- otherID instanceof SiteID &&
- getSite().contentEquals( ( (SiteID)otherID).getSite() );
- }
-
- @Override
- public AliasIDType getType()
- {
- return AliasIDType.SITE;
- }
-}
diff --git a/src/alias/id/status/StatusID.java b/src/alias/id/status/StatusID.java
deleted file mode 100644
index 71ccb5d8..00000000
--- a/src/alias/id/status/StatusID.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * SDR Trunk
- * Copyright (C) 2014 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- ******************************************************************************/
-package alias.id.status;
-
-import javax.xml.bind.annotation.XmlAttribute;
-
-import alias.id.AliasID;
-import alias.id.AliasIDType;
-
-public class StatusID extends AliasID
-{
- private int mStatus;
-
- public StatusID()
- {
- }
-
- @XmlAttribute
- public int getStatus()
- {
- return mStatus;
- }
-
- public void setStatus( int status )
- {
- this.mStatus = status;
- }
-
- @Override
- public boolean isValid()
- {
- return true;
- }
-
- public String toString()
- {
- return "Status: " + String.format( "%03d", mStatus );
- }
-
- @Override
- public boolean matches( AliasID id )
- {
- boolean retVal = false;
-
- if( id instanceof StatusID )
- {
- StatusID statusId = (StatusID)id;
-
- retVal = ( mStatus == statusId.getStatus() );
- }
-
- return retVal;
- }
-
- @Override
- public AliasIDType getType()
- {
- return AliasIDType.STATUS;
- }
-}
diff --git a/src/alias/id/uniqueID/UniqueID.java b/src/alias/id/uniqueID/UniqueID.java
deleted file mode 100644
index 69302b38..00000000
--- a/src/alias/id/uniqueID/UniqueID.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * SDR Trunk
- * Copyright (C) 2014 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- ******************************************************************************/
-package alias.id.uniqueID;
-
-import javax.xml.bind.annotation.XmlAttribute;
-
-import alias.id.AliasID;
-import alias.id.AliasIDType;
-
-public class UniqueID extends AliasID
-{
- private int mUid;
-
- public UniqueID()
- {
- }
-
- @XmlAttribute
- public int getUid()
- {
- return mUid;
- }
-
- public void setUid( int uid )
- {
- this.mUid = uid;
- }
-
- @Override
- public boolean isValid()
- {
- return true;
- }
-
- public String toString()
- {
- return "UniqueID: " + mUid;
- }
-
- @Override
- public boolean matches( AliasID id )
- {
- boolean retVal = false;
-
- if( id instanceof UniqueID )
- {
- UniqueID uid = (UniqueID)id;
-
- retVal = mUid == uid.getUid();
- }
-
- return retVal;
- }
-
- @Override
- public AliasIDType getType()
- {
- return AliasIDType.LTR_NET_UID;
- }
-}
diff --git a/src/controller/channel/map/ChannelMap.java b/src/controller/channel/map/ChannelMap.java
deleted file mode 100644
index 107280f8..00000000
--- a/src/controller/channel/map/ChannelMap.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*******************************************************************************
- * SDR Trunk
- * Copyright (C) 2014 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- ******************************************************************************/
-package controller.channel.map;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlSeeAlso;
-import javax.xml.bind.annotation.XmlTransient;
-
-@XmlSeeAlso( { ChannelRange.class } )
-public class ChannelMap
-{
- private String mName;
- private boolean mInvalid = false;
-
- private List mRanges = new ArrayList();
-
- public ChannelMap()
- {
- this( "New Channel Map" );
- }
-
- public ChannelMap( String name )
- {
- mName = name;
- }
-
- public ChannelMap copyOf()
- {
- ChannelMap map = new ChannelMap( new String( mName ) );
-
- for( ChannelRange range: mRanges )
- {
- map.addRange( range.copyOf() );
- }
-
- return map;
- }
-
- @XmlTransient
- public boolean isInvalid()
- {
- return mInvalid;
- }
-
- public String toString()
- {
- return mName + ( mInvalid ? " - Error" : "" );
- }
-
- @XmlElement( name = "range" )
- public List getRanges()
- {
- return mRanges;
- }
-
- public void setRanges( List ranges )
- {
- mRanges = ranges;
-
- validate();
- }
-
- @XmlAttribute
- public String getName()
- {
- return mName;
- }
-
- public void setName( String name )
- {
- mName = name;
- }
-
- public long getFrequency( int channelNumber )
- {
- for( ChannelRange range: mRanges )
- {
- if( range.hasChannel( channelNumber ) )
- {
- return range.getFrequency( channelNumber );
- }
- }
-
- return 0;
- }
-
- /**
- * Validates each of the channel ranges for overlap
- */
- private void validate()
- {
- mInvalid = false;
-
- for( int x = 0; x < mRanges.size(); x++ )
- {
- if( !mRanges.get( x ).isValid() )
- {
- mInvalid = true;
- }
-
- for( int y = x + 1; y < mRanges.size(); y++ )
- {
- if( mRanges.get( x ).overlaps( mRanges.get( y ) ) )
- {
- mInvalid = true;
- }
- }
- }
- }
-
-
- public void addRange( ChannelRange range )
- {
- mRanges.add( range );
-
- validate();
- }
-
- public void removeRange( ChannelRange range )
- {
- mRanges.remove( range );
-
- validate();
- }
-
-}
diff --git a/src/controller/channel/map/ChannelRange.java b/src/controller/channel/map/ChannelRange.java
deleted file mode 100644
index 5e086b89..00000000
--- a/src/controller/channel/map/ChannelRange.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*******************************************************************************
- * SDR Trunk
- * Copyright (C) 2014-2016 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- ******************************************************************************/
-package controller.channel.map;
-
-import java.text.DecimalFormat;
-
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlTransient;
-import javax.xml.bind.annotation.XmlType;
-
-@XmlRootElement
-@XmlType( name = "range" )
-public class ChannelRange
-{
- private static final DecimalFormat FREQUENCY_FORMATTER = new DecimalFormat( "#.0000" );
-
- private int mFirst = 1;
- private int mLast = 1023;
- private int mBase = 450000000;
- private int mSize = 12500;
-
- private boolean mOverlapping = false;
-
- public ChannelRange()
- {
- }
-
- public ChannelRange( int first, int last, int base, int size )
- {
- mFirst = first;
- mLast = last;
- mBase = base;
- mSize = size;
- }
-
- public ChannelRange copyOf()
- {
- return new ChannelRange( mFirst, mLast, mBase, mSize );
- }
-
- public String getDescription()
- {
- StringBuilder sb = new StringBuilder();
-
- if( isValid() )
- {
- sb.append( "First: " );
- sb.append( mFirst + "=" );
-
- long frequency = getFrequency( mFirst );
-
- sb.append( FREQUENCY_FORMATTER.format( (double)frequency / 1E6D ) );
- sb.append( " Last: " );
- sb.append( mLast + "=" );
-
- frequency = getFrequency( mLast );
- sb.append( FREQUENCY_FORMATTER.format( (double)frequency / 1E6D ) );
- sb.append( " MHz" );
- }
- else
- {
- sb.append( "First channel must be smaller than last channel" );
- }
-
- if( isOverlapping() )
- {
- if( sb.length() > 0 )
- {
- sb.append( ", " );
- }
-
- sb.append( "Overlap!" );
- }
-
- return sb.toString();
- }
-
- public boolean isValid()
- {
- return mFirst < mLast;
- }
-
- public boolean overlaps( ChannelRange other )
- {
- return ( mFirst <= other.mFirst && other.mFirst <= mLast ) ||
- ( mFirst <= other.mLast && other.mLast <= mLast ) ||
- ( mFirst <= other.mFirst && other.mLast <= mLast ) ||
- ( other.mFirst <= mFirst && mLast <= other.mLast );
- }
-
- @XmlTransient
- public boolean isOverlapping()
- {
- return mOverlapping;
- }
-
- public void setOverlapping( boolean overlapping )
- {
- mOverlapping = overlapping;
- }
-
- public boolean hasChannel( int channel )
- {
- return mFirst <= channel && channel <= mLast;
- }
-
- public long getFrequency( int channel )
- {
- if( hasChannel( channel ) )
- {
- return mBase + ( ( channel - mFirst ) * mSize );
- }
- else
- {
- return 0;
- }
- }
-
- @XmlAttribute( name = "first" )
- public int getFirstChannelNumber()
- {
- return mFirst;
- }
-
- public void setFirstChannelNumber( int first )
- {
- mFirst = first;
- }
-
- @XmlAttribute( name = "last" )
- public void setLastChannelNumber( int last )
- {
- mLast = last;
- }
-
- public int getLastChannelNumber()
- {
- return mLast;
- }
-
- /**
- * Sets the base frequency
- * @param base frequency in hertz
- */
- @XmlAttribute( name = "base" )
- public void setBase( int base )
- {
- mBase = base;
- }
-
- public int getBase()
- {
- return mBase;
- }
-
- /**
- * Sets the channel size
- * @param size in hertz
- */
- @XmlAttribute( name = "size" )
- public void setSize( int size )
- {
- mSize = size;
- }
-
- public int getSize()
- {
- return mSize;
- }
-}
diff --git a/src/controller/config/Configuration.java b/src/controller/config/Configuration.java
deleted file mode 100644
index 53bc1929..00000000
--- a/src/controller/config/Configuration.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * SDR Trunk
- * Copyright (C) 2014 Dennis Sheirer
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see
- ******************************************************************************/
-package controller.config;
-
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlSeeAlso;
-
-import module.decode.config.AuxDecodeConfiguration;
-import module.decode.config.DecodeConfiguration;
-import module.log.config.EventLogConfiguration;
-import record.config.RecordConfiguration;
-import source.config.SourceConfiguration;
-
-@XmlSeeAlso( { AuxDecodeConfiguration.class,
- DecodeConfiguration.class,
- EventLogConfiguration.class,
- RecordConfiguration.class,
- SourceConfiguration.class } )
-@XmlRootElement( name = "configuration" )
-public abstract class Configuration
-{
- public Configuration()
- {
- }
-}
diff --git a/src/main/java/io/github/dsheirer/alias/Alias.java b/src/main/java/io/github/dsheirer/alias/Alias.java
new file mode 100644
index 00000000..588995cd
--- /dev/null
+++ b/src/main/java/io/github/dsheirer/alias/Alias.java
@@ -0,0 +1,351 @@
+/*******************************************************************************
+ * SDR Trunk
+ * Copyright (C) 2014-2016 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ ******************************************************************************/
+package io.github.dsheirer.alias;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import io.github.dsheirer.alias.action.AliasAction;
+import io.github.dsheirer.alias.id.AliasID;
+import io.github.dsheirer.alias.id.AliasIDType;
+import io.github.dsheirer.alias.id.broadcast.BroadcastChannel;
+import io.github.dsheirer.alias.id.nonrecordable.NonRecordable;
+import io.github.dsheirer.alias.id.priority.Priority;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+@JacksonXmlRootElement(localName = "alias")
+public class Alias
+{
+ private String mList;
+ private String mGroup;
+ private String mName;
+ private int mColor;
+ private String mIconName;
+ private List mAliasIDs = new ArrayList();
+ private List mAliasActions = new ArrayList();
+
+ public Alias()
+ {
+ }
+
+ public Alias(String name)
+ {
+ mName = name;
+ }
+
+ public String toString()
+ {
+ return getName();
+ }
+
+ @JacksonXmlProperty(isAttribute = true, localName = "name")
+ public String getName()
+ {
+ return mName;
+ }
+
+ public void setName(String name)
+ {
+ mName = name;
+ }
+
+ @JacksonXmlProperty(isAttribute = true, localName = "list")
+ public String getList()
+ {
+ return mList;
+ }
+
+ public void setList(String list)
+ {
+ mList = list;
+ }
+
+ public boolean hasList()
+ {
+ return mList != null;
+ }
+
+ @JacksonXmlProperty(isAttribute = true, localName = "group")
+ public String getGroup()
+ {
+ return mGroup;
+ }
+
+ public void setGroup(String group)
+ {
+ mGroup = group;
+ }
+
+ public boolean hasGroup()
+ {
+ return mGroup != null;
+ }
+
+ @JacksonXmlProperty(isAttribute = true, localName = "color")
+ public int getColor()
+ {
+ return mColor;
+ }
+
+ public void setColor(int color)
+ {
+ mColor = color;
+ }
+
+ @JsonIgnore
+ public Color getDisplayColor()
+ {
+ return new Color(getColor());
+ }
+
+ @JacksonXmlProperty(isAttribute = true, localName = "iconName")
+ public String getIconName()
+ {
+ return mIconName;
+ }
+
+ public void setIconName(String iconName)
+ {
+ mIconName = iconName;
+ }
+
+ @JacksonXmlProperty(isAttribute = false, localName = "id")
+ public List getId()
+ {
+ return mAliasIDs;
+ }
+
+ public void setId(ArrayList id)
+ {
+ mAliasIDs = id;
+ }
+
+ public void addAliasID(AliasID id)
+ {
+ mAliasIDs.add(id);
+ }
+
+ public void removeAliasID(AliasID id)
+ {
+ mAliasIDs.remove(id);
+ }
+
+ @JacksonXmlProperty(isAttribute = false, localName = "action")
+ public List getAction()
+ {
+ return mAliasActions;
+ }
+
+ public void setAction(List actions)
+ {
+ mAliasActions = actions;
+ }
+
+ public void addAliasAction(AliasAction action)
+ {
+ mAliasActions.add(action);
+ }
+
+ public void removeAliasAction(AliasAction action)
+ {
+ mAliasActions.remove(action);
+ }
+
+ public boolean hasActions()
+ {
+ return !mAliasActions.isEmpty();
+ }
+
+ /**
+ * Perform any validation/cleanup actions on this alias.
+ */
+ public void validate()
+ {
+ }
+
+ /**
+ * Returns the priority level of this alias, if defined, or the default priority
+ */
+ @JsonIgnore
+ public int getCallPriority()
+ {
+ for(AliasID id : mAliasIDs)
+ {
+ if(id.getType() == AliasIDType.PRIORITY)
+ {
+ return ((Priority)id).getPriority();
+ }
+ }
+
+ return Priority.DEFAULT_PRIORITY;
+ }
+
+ public boolean hasCallPriority()
+ {
+ for(AliasID id : mAliasIDs)
+ {
+ if(id.getType() == AliasIDType.PRIORITY)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Sets or updates the call priority
+ */
+ public void setCallPriority(int priority)
+ {
+ if(priority == Priority.DO_NOT_MONITOR ||
+ (Priority.MIN_PRIORITY <= priority && priority <= Priority.MAX_PRIORITY))
+ {
+ for(AliasID id : mAliasIDs)
+ {
+ if(id.getType() == AliasIDType.PRIORITY)
+ {
+ ((Priority)id).setPriority(priority);
+ return;
+ }
+ }
+
+ //If we don't find a priority id, create one
+ Priority p = new Priority();
+ p.setPriority(priority);
+ addAliasID(p);
+ }
+ }
+
+ /**
+ * Inspects the alias for a non-recordable alias id. Default is true;
+ */
+ @JsonIgnore
+ public boolean isRecordable()
+ {
+ for(AliasID id : getId())
+ {
+ if(id.getType() == AliasIDType.NON_RECORDABLE)
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Sets or removes the non-recordable alias ID for this alias.
+ */
+ public void setRecordable(boolean recordable)
+ {
+ if(recordable)
+ {
+ AliasID toRemove = null;
+
+ for(AliasID id : getId())
+ {
+ if(id.getType() == AliasIDType.NON_RECORDABLE)
+ {
+ toRemove = id;
+ break;
+ }
+ }
+
+ if(toRemove != null)
+ {
+ removeAliasID(toRemove);
+ }
+ }
+ else
+ {
+ for(AliasID id : getId())
+ {
+ if(id.getType() == AliasIDType.NON_RECORDABLE)
+ {
+ return;
+ }
+ }
+
+ addAliasID(new NonRecordable());
+ }
+ }
+
+ /**
+ * Inspects the alias for broadcast channel/streamable alias ids. Default is false;
+ */
+ @JsonIgnore
+ public boolean isStreamable()
+ {
+ for(AliasID id : getId())
+ {
+ if(id.getType() == AliasIDType.BROADCAST_CHANNEL)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * List of broadcast channels specified for this alias.
+ */
+ @JsonIgnore
+ public Set getBroadcastChannels()
+ {
+ Set broadcastChannels = new TreeSet<>();
+
+ for(AliasID id : getId())
+ {
+ if(id.getType() == AliasIDType.BROADCAST_CHANNEL)
+ {
+ broadcastChannels.add((BroadcastChannel)id);
+ }
+ }
+
+ return broadcastChannels;
+ }
+
+ /**
+ * Indicates if this alias contains a broadcast channel alias id with the channel name.
+ */
+ public boolean hasBroadcastChannel(String channel)
+ {
+ if(channel == null || channel.isEmpty())
+ {
+ return false;
+ }
+
+ for(AliasID id : getId())
+ {
+ if(id.getType() == AliasIDType.BROADCAST_CHANNEL &&
+ ((BroadcastChannel)id).getChannelName().contentEquals(channel))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+}
diff --git a/src/alias/AliasController.java b/src/main/java/io/github/dsheirer/alias/AliasController.java
similarity index 98%
rename from src/alias/AliasController.java
rename to src/main/java/io/github/dsheirer/alias/AliasController.java
index 7dc27ccf..48f6935c 100644
--- a/src/alias/AliasController.java
+++ b/src/main/java/io/github/dsheirer/alias/AliasController.java
@@ -1,9 +1,9 @@
-package alias;
+package io.github.dsheirer.alias;
-import audio.broadcast.BroadcastModel;
import com.jidesoft.swing.JideSplitPane;
-import gui.editor.Editor;
-import icon.IconManager;
+import io.github.dsheirer.audio.broadcast.BroadcastModel;
+import io.github.dsheirer.gui.editor.Editor;
+import io.github.dsheirer.icon.IconManager;
import net.coderazzi.filters.gui.AutoChoices;
import net.coderazzi.filters.gui.TableFilterHeader;
import net.miginfocom.swing.MigLayout;
diff --git a/src/alias/AliasEditor.java b/src/main/java/io/github/dsheirer/alias/AliasEditor.java
similarity index 91%
rename from src/alias/AliasEditor.java
rename to src/main/java/io/github/dsheirer/alias/AliasEditor.java
index 706ef5e4..a6df0774 100644
--- a/src/alias/AliasEditor.java
+++ b/src/main/java/io/github/dsheirer/alias/AliasEditor.java
@@ -15,27 +15,21 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
******************************************************************************/
-package alias;
-
-import audio.broadcast.BroadcastModel;
-import gui.editor.Editor;
-
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JButton;
-import javax.swing.JLabel;
-import javax.swing.JSeparator;
-
-import icon.IconManager;
-import net.miginfocom.swing.MigLayout;
-import sample.Listener;
-import settings.SettingsManager;
-import alias.action.AliasActionEditor;
-import alias.id.AliasIdentifierEditor;
+package io.github.dsheirer.alias;
import com.jidesoft.swing.JideTabbedPane;
+import io.github.dsheirer.alias.action.AliasActionEditor;
+import io.github.dsheirer.alias.id.AliasIdentifierEditor;
+import io.github.dsheirer.audio.broadcast.BroadcastModel;
+import io.github.dsheirer.gui.editor.Editor;
+import io.github.dsheirer.icon.IconManager;
+import io.github.dsheirer.sample.Listener;
+import net.miginfocom.swing.MigLayout;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
public class AliasEditor extends Editor
implements ActionListener, Listener
diff --git a/src/alias/AliasEvent.java b/src/main/java/io/github/dsheirer/alias/AliasEvent.java
similarity index 97%
rename from src/alias/AliasEvent.java
rename to src/main/java/io/github/dsheirer/alias/AliasEvent.java
index c1cacd74..f0370ae6 100644
--- a/src/alias/AliasEvent.java
+++ b/src/main/java/io/github/dsheirer/alias/AliasEvent.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
******************************************************************************/
-package alias;
+package io.github.dsheirer.alias;
public class AliasEvent
{
diff --git a/src/alias/AliasFactory.java b/src/main/java/io/github/dsheirer/alias/AliasFactory.java
similarity index 76%
rename from src/alias/AliasFactory.java
rename to src/main/java/io/github/dsheirer/alias/AliasFactory.java
index 7acb920e..ad28d053 100644
--- a/src/alias/AliasFactory.java
+++ b/src/main/java/io/github/dsheirer/alias/AliasFactory.java
@@ -15,47 +15,47 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
******************************************************************************/
-package alias;
+package io.github.dsheirer.alias;
-import alias.action.AliasAction;
-import alias.action.AliasActionType;
-import alias.action.beep.BeepAction;
-import alias.action.beep.BeepActionEditor;
-import alias.action.clip.ClipAction;
-import alias.action.clip.ClipActionEditor;
-import alias.action.script.ScriptAction;
-import alias.action.script.ScriptActionEditor;
-import alias.id.AliasID;
-import alias.id.AliasIDType;
-import alias.id.broadcast.BroadcastChannel;
-import alias.id.broadcast.BroadcastChannelEditor;
-import alias.id.esn.ESNEditor;
-import alias.id.esn.Esn;
-import alias.id.fleetsync.FleetsyncID;
-import alias.id.fleetsync.FleetsyncIDEditor;
-import alias.id.lojack.LoJackFunctionAndID;
-import alias.id.lojack.LoJackIDEditor;
-import alias.id.mdc.MDC1200ID;
-import alias.id.mdc.MDC1200IDEditor;
-import alias.id.mobileID.MINEditor;
-import alias.id.mobileID.Min;
-import alias.id.mpt1327.MPT1327ID;
-import alias.id.mpt1327.MPT1327IDEditor;
-import alias.id.nonrecordable.NonRecordable;
-import alias.id.nonrecordable.NonRecordableEditor;
-import alias.id.priority.Priority;
-import alias.id.priority.PriorityEditor;
-import alias.id.siteID.SiteID;
-import alias.id.siteID.SiteIDEditor;
-import alias.id.status.StatusID;
-import alias.id.status.StatusIDEditor;
-import alias.id.talkgroup.TalkgroupID;
-import alias.id.talkgroup.TalkgroupIDEditor;
-import alias.id.uniqueID.UniqueID;
-import alias.id.uniqueID.UniqueIDEditor;
-import audio.broadcast.BroadcastModel;
-import gui.editor.Editor;
-import gui.editor.EmptyEditor;
+import io.github.dsheirer.alias.action.AliasAction;
+import io.github.dsheirer.alias.action.AliasActionType;
+import io.github.dsheirer.alias.action.beep.BeepAction;
+import io.github.dsheirer.alias.action.beep.BeepActionEditor;
+import io.github.dsheirer.alias.action.clip.ClipAction;
+import io.github.dsheirer.alias.action.clip.ClipActionEditor;
+import io.github.dsheirer.alias.action.script.ScriptAction;
+import io.github.dsheirer.alias.action.script.ScriptActionEditor;
+import io.github.dsheirer.alias.id.AliasID;
+import io.github.dsheirer.alias.id.AliasIDType;
+import io.github.dsheirer.alias.id.broadcast.BroadcastChannel;
+import io.github.dsheirer.alias.id.broadcast.BroadcastChannelEditor;
+import io.github.dsheirer.alias.id.esn.ESNEditor;
+import io.github.dsheirer.alias.id.esn.Esn;
+import io.github.dsheirer.alias.id.fleetsync.FleetsyncID;
+import io.github.dsheirer.alias.id.fleetsync.FleetsyncIDEditor;
+import io.github.dsheirer.alias.id.lojack.LoJackFunctionAndID;
+import io.github.dsheirer.alias.id.lojack.LoJackIDEditor;
+import io.github.dsheirer.alias.id.mdc.MDC1200ID;
+import io.github.dsheirer.alias.id.mdc.MDC1200IDEditor;
+import io.github.dsheirer.alias.id.mobileID.MINEditor;
+import io.github.dsheirer.alias.id.mobileID.Min;
+import io.github.dsheirer.alias.id.mpt1327.MPT1327ID;
+import io.github.dsheirer.alias.id.mpt1327.MPT1327IDEditor;
+import io.github.dsheirer.alias.id.nonrecordable.NonRecordable;
+import io.github.dsheirer.alias.id.nonrecordable.NonRecordableEditor;
+import io.github.dsheirer.alias.id.priority.Priority;
+import io.github.dsheirer.alias.id.priority.PriorityEditor;
+import io.github.dsheirer.alias.id.siteID.SiteID;
+import io.github.dsheirer.alias.id.siteID.SiteIDEditor;
+import io.github.dsheirer.alias.id.status.StatusID;
+import io.github.dsheirer.alias.id.status.StatusIDEditor;
+import io.github.dsheirer.alias.id.talkgroup.TalkgroupID;
+import io.github.dsheirer.alias.id.talkgroup.TalkgroupIDEditor;
+import io.github.dsheirer.alias.id.uniqueID.UniqueID;
+import io.github.dsheirer.alias.id.uniqueID.UniqueIDEditor;
+import io.github.dsheirer.audio.broadcast.BroadcastModel;
+import io.github.dsheirer.gui.editor.Editor;
+import io.github.dsheirer.gui.editor.EmptyEditor;
public class AliasFactory
{
@@ -138,7 +138,7 @@ public class AliasFactory
{
return new BeepAction();
}
- else if( action instanceof ClipAction )
+ else if( action instanceof ClipAction)
{
ClipAction originalClip = (ClipAction)action;
ClipAction copyClip = new ClipAction();
diff --git a/src/alias/AliasList.java b/src/main/java/io/github/dsheirer/alias/AliasList.java
similarity index 95%
rename from src/alias/AliasList.java
rename to src/main/java/io/github/dsheirer/alias/AliasList.java
index 44a2b2e9..b51503bf 100644
--- a/src/alias/AliasList.java
+++ b/src/main/java/io/github/dsheirer/alias/AliasList.java
@@ -16,26 +16,26 @@
* along with this program. If not, see
*
******************************************************************************/
-package alias;
+package io.github.dsheirer.alias;
-import alias.id.AliasID;
-import alias.id.WildcardID;
-import alias.id.esn.Esn;
-import alias.id.fleetsync.FleetsyncID;
-import alias.id.lojack.LoJackFunctionAndID;
-import alias.id.mdc.MDC1200ID;
-import alias.id.mobileID.Min;
-import alias.id.mpt1327.MPT1327ID;
-import alias.id.siteID.SiteID;
-import alias.id.status.StatusID;
-import alias.id.talkgroup.TalkgroupID;
-import alias.id.uniqueID.UniqueID;
-import module.decode.lj1200.LJ1200Message.Function;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import io.github.dsheirer.alias.id.AliasID;
+import io.github.dsheirer.alias.id.WildcardID;
+import io.github.dsheirer.alias.id.esn.Esn;
+import io.github.dsheirer.alias.id.fleetsync.FleetsyncID;
+import io.github.dsheirer.alias.id.lojack.LoJackFunctionAndID;
+import io.github.dsheirer.alias.id.mdc.MDC1200ID;
+import io.github.dsheirer.alias.id.mobileID.Min;
+import io.github.dsheirer.alias.id.mpt1327.MPT1327ID;
+import io.github.dsheirer.alias.id.siteID.SiteID;
+import io.github.dsheirer.alias.id.status.StatusID;
+import io.github.dsheirer.alias.id.talkgroup.TalkgroupID;
+import io.github.dsheirer.alias.id.uniqueID.UniqueID;
+import io.github.dsheirer.module.decode.lj1200.LJ1200Message;
+import io.github.dsheirer.sample.Listener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import sample.Listener;
-import javax.xml.bind.annotation.XmlAttribute;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -486,7 +486,7 @@ public class AliasList implements Listener
/**
* Lookup alias by lojack function and ID
*/
- public Alias getLoJackAlias(Function function, String id)
+ public Alias getLoJackAlias(LJ1200Message.Function function, String id)
{
if(id != null)
{
@@ -625,7 +625,7 @@ public class AliasList implements Listener
/**
* Alias list name
*/
- @XmlAttribute
+ @JacksonXmlProperty(isAttribute = true, localName = "name")
public String getName()
{
return mName;
diff --git a/src/alias/AliasModel.java b/src/main/java/io/github/dsheirer/alias/AliasModel.java
similarity index 95%
rename from src/alias/AliasModel.java
rename to src/main/java/io/github/dsheirer/alias/AliasModel.java
index 1389d299..2a62f05f 100644
--- a/src/alias/AliasModel.java
+++ b/src/main/java/io/github/dsheirer/alias/AliasModel.java
@@ -15,12 +15,11 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
******************************************************************************/
-package alias;
+package io.github.dsheirer.alias;
-import alias.AliasEvent.Event;
-import alias.id.broadcast.BroadcastChannel;
-import sample.Broadcaster;
-import sample.Listener;
+import io.github.dsheirer.alias.id.broadcast.BroadcastChannel;
+import io.github.dsheirer.sample.Broadcaster;
+import io.github.dsheirer.sample.Listener;
import javax.swing.table.AbstractTableModel;
import java.util.ArrayList;
@@ -188,7 +187,7 @@ public class AliasModel extends AbstractTableModel
fireTableRowsInserted(index, index);
- broadcast(new AliasEvent(alias, Event.ADD));
+ broadcast(new AliasEvent(alias, AliasEvent.Event.ADD));
return index;
}
@@ -209,7 +208,7 @@ public class AliasModel extends AbstractTableModel
fireTableRowsDeleted(index, index);
- broadcast(new AliasEvent(alias, Event.DELETE));
+ broadcast(new AliasEvent(alias, AliasEvent.Event.DELETE));
}
}
@@ -328,7 +327,7 @@ public class AliasModel extends AbstractTableModel
alias.validate();
}
- if(event.getEvent() == Event.CHANGE)
+ if(event.getEvent() == AliasEvent.Event.CHANGE)
{
int index = mAliases.indexOf(event.getAlias());
diff --git a/src/alias/AliasNameEditor.java b/src/main/java/io/github/dsheirer/alias/AliasNameEditor.java
similarity index 96%
rename from src/alias/AliasNameEditor.java
rename to src/main/java/io/github/dsheirer/alias/AliasNameEditor.java
index 3c205941..6fcc06aa 100644
--- a/src/alias/AliasNameEditor.java
+++ b/src/main/java/io/github/dsheirer/alias/AliasNameEditor.java
@@ -16,14 +16,13 @@
* along with this program. If not, see
*
******************************************************************************/
-package alias;
+package io.github.dsheirer.alias;
-import alias.AliasEvent.Event;
-import gui.editor.Editor;
-import icon.Icon;
-import icon.IconListCellRenderer;
-import icon.IconManager;
-import icon.IconTableModel;
+import io.github.dsheirer.gui.editor.Editor;
+import io.github.dsheirer.icon.Icon;
+import io.github.dsheirer.icon.IconListCellRenderer;
+import io.github.dsheirer.icon.IconManager;
+import io.github.dsheirer.icon.IconTableModel;
import net.miginfocom.swing.MigLayout;
import javax.swing.*;
@@ -328,7 +327,7 @@ public class AliasNameEditor extends Editor
setModified(false);
//Broadcast an alias change event to save the updates
- mAliasModel.broadcast(new AliasEvent(getItem(), Event.CHANGE));
+ mAliasModel.broadcast(new AliasEvent(getItem(), AliasEvent.Event.CHANGE));
}
}
}
diff --git a/src/alias/ComponentEditor.java b/src/main/java/io/github/dsheirer/alias/ComponentEditor.java
similarity index 98%
rename from src/alias/ComponentEditor.java
rename to src/main/java/io/github/dsheirer/alias/ComponentEditor.java
index 9cc909bf..7bae5fcf 100644
--- a/src/alias/ComponentEditor.java
+++ b/src/main/java/io/github/dsheirer/alias/ComponentEditor.java
@@ -15,9 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
******************************************************************************/
-package alias;
+package io.github.dsheirer.alias;
-import javax.swing.JPanel;
+import javax.swing.*;
import javax.swing.event.DocumentListener;
public abstract class ComponentEditor extends JPanel implements DocumentListener
@@ -86,7 +86,7 @@ public abstract class ComponentEditor extends JPanel implements DocumentListe
public abstract void save();
/**
- * Reloads the editor contents from the source component and resets the
+ * Reloads the editor contents from the source component and resets the
* modified flag
*/
public void reset()
diff --git a/src/alias/ComponentValidationException.java b/src/main/java/io/github/dsheirer/alias/ComponentValidationException.java
similarity index 88%
rename from src/alias/ComponentValidationException.java
rename to src/main/java/io/github/dsheirer/alias/ComponentValidationException.java
index bfa8d925..9bf0445a 100644
--- a/src/alias/ComponentValidationException.java
+++ b/src/main/java/io/github/dsheirer/alias/ComponentValidationException.java
@@ -1,4 +1,4 @@
-package alias;
+package io.github.dsheirer.alias;
public class ComponentValidationException extends Exception
{
diff --git a/src/alias/MultipleAliasEditor.java b/src/main/java/io/github/dsheirer/alias/MultipleAliasEditor.java
similarity index 95%
rename from src/alias/MultipleAliasEditor.java
rename to src/main/java/io/github/dsheirer/alias/MultipleAliasEditor.java
index 796379b4..472911fc 100644
--- a/src/alias/MultipleAliasEditor.java
+++ b/src/main/java/io/github/dsheirer/alias/MultipleAliasEditor.java
@@ -1,18 +1,17 @@
-package alias;
+package io.github.dsheirer.alias;
-import alias.AliasEvent.Event;
-import alias.id.AliasIDType;
-import alias.id.broadcast.BroadcastChannel;
-import alias.id.priority.Priority;
-import audio.broadcast.BroadcastModel;
-import gui.editor.Editor;
-import icon.Icon;
-import icon.IconListCellRenderer;
-import icon.IconManager;
+import io.github.dsheirer.alias.id.AliasIDType;
+import io.github.dsheirer.alias.id.broadcast.BroadcastChannel;
+import io.github.dsheirer.alias.id.priority.Priority;
+import io.github.dsheirer.audio.broadcast.BroadcastModel;
+import io.github.dsheirer.gui.editor.Editor;
+import io.github.dsheirer.icon.Icon;
+import io.github.dsheirer.icon.IconListCellRenderer;
+import io.github.dsheirer.icon.IconManager;
+import io.github.dsheirer.sample.Listener;
import net.miginfocom.swing.MigLayout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import sample.Listener;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
@@ -430,7 +429,7 @@ public class MultipleAliasEditor extends Editor>
for (Alias alias : aliases)
{
//Broadcast an alias change event to save the updates
- mAliasModel.broadcast(new AliasEvent(alias, Event.CHANGE));
+ mAliasModel.broadcast(new AliasEvent(alias, AliasEvent.Event.CHANGE));
}
}
}
@@ -438,7 +437,7 @@ public class MultipleAliasEditor extends Editor>
@Override
public void receive(AliasEvent event)
{
- if (event.getEvent() == Event.DELETE &&
+ if (event.getEvent() == AliasEvent.Event.DELETE &&
hasItem() &&
getAliases().contains(event.getAlias()))
{
diff --git a/src/alias/PatchGroupAlias.java b/src/main/java/io/github/dsheirer/alias/PatchGroupAlias.java
similarity index 96%
rename from src/alias/PatchGroupAlias.java
rename to src/main/java/io/github/dsheirer/alias/PatchGroupAlias.java
index bb7e347a..9350fec8 100644
--- a/src/alias/PatchGroupAlias.java
+++ b/src/main/java/io/github/dsheirer/alias/PatchGroupAlias.java
@@ -16,18 +16,16 @@
* along with this program. If not, see
*
******************************************************************************/
-package alias;
+package io.github.dsheirer.alias;
-import alias.action.AliasAction;
-import alias.id.AliasID;
-import alias.id.AliasIDType;
-import alias.id.broadcast.BroadcastChannel;
-import alias.id.priority.Priority;
-import alias.id.talkgroup.TalkgroupID;
-import gui.SDRTrunk;
+import io.github.dsheirer.alias.action.AliasAction;
+import io.github.dsheirer.alias.id.AliasID;
+import io.github.dsheirer.alias.id.AliasIDType;
+import io.github.dsheirer.alias.id.broadcast.BroadcastChannel;
+import io.github.dsheirer.alias.id.priority.Priority;
+import io.github.dsheirer.alias.id.talkgroup.TalkgroupID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import playlist.version1.System;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/main/java/io/github/dsheirer/alias/action/AliasAction.java b/src/main/java/io/github/dsheirer/alias/action/AliasAction.java
new file mode 100644
index 00000000..ae514992
--- /dev/null
+++ b/src/main/java/io/github/dsheirer/alias/action/AliasAction.java
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * sdrtrunk
+ * Copyright (C) 2014-2017 Dennis Sheirer
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see
+ *
+ ******************************************************************************/
+package io.github.dsheirer.alias.action;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import io.github.dsheirer.alias.Alias;
+import io.github.dsheirer.alias.action.beep.BeepAction;
+import io.github.dsheirer.alias.action.clip.ClipAction;
+import io.github.dsheirer.alias.action.script.ScriptAction;
+import io.github.dsheirer.message.Message;
+
+import java.util.concurrent.ScheduledExecutorService;
+
+/**
+ * Alias action defines an action to execute when an alias is detected active.
+ */
+@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = BeepAction.class, name="beepAction"),
+ @JsonSubTypes.Type(value = ClipAction.class, name = "clipAction"),
+ @JsonSubTypes.Type(value = RecurringAction.class, name = "recurringAction"),
+ @JsonSubTypes.Type(value = ScriptAction.class, name = "scriptAction")
+})
+@JacksonXmlRootElement(localName = "action")
+public abstract class AliasAction
+{
+ public AliasAction()
+ {
+ }
+
+ @JsonIgnore
+ public abstract AliasActionType getType();
+
+ /**
+ * Task to execute when an alias action is defined. The message argument is
+ * the original message containing one or more aliases that have an alias
+ * action attached. The alias argument is the parent alias containing the
+ * alias action.
+ */
+ public abstract void execute(ScheduledExecutorService scheduledExecutorService, Alias alias, Message message);
+
+ /**
+ * Dismiss a persistent alias action
+ */
+ public abstract void dismiss(boolean reset);
+}
diff --git a/src/alias/action/AliasActionEditor.java b/src/main/java/io/github/dsheirer/alias/action/AliasActionEditor.java
similarity index 93%
rename from src/alias/action/AliasActionEditor.java
rename to src/main/java/io/github/dsheirer/alias/action/AliasActionEditor.java
index f4d41aa9..388a5ea9 100644
--- a/src/alias/action/AliasActionEditor.java
+++ b/src/main/java/io/github/dsheirer/alias/action/AliasActionEditor.java
@@ -15,12 +15,21 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
******************************************************************************/
-package alias.action;
+package io.github.dsheirer.alias.action;
-import gui.editor.Editor;
-import gui.editor.EmptyEditor;
+import io.github.dsheirer.alias.Alias;
+import io.github.dsheirer.alias.AliasEvent;
+import io.github.dsheirer.alias.AliasEvent.Event;
+import io.github.dsheirer.alias.AliasFactory;
+import io.github.dsheirer.alias.AliasModel;
+import io.github.dsheirer.gui.editor.Editor;
+import io.github.dsheirer.gui.editor.EmptyEditor;
+import net.miginfocom.swing.MigLayout;
-import java.awt.EventQueue;
+import javax.swing.*;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
+import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
@@ -29,26 +38,6 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.List;
-import javax.swing.DefaultListModel;
-import javax.swing.JButton;
-import javax.swing.JList;
-import javax.swing.JMenuItem;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-import javax.swing.JPopupMenu;
-import javax.swing.JScrollPane;
-import javax.swing.ListModel;
-import javax.swing.ListSelectionModel;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-
-import net.miginfocom.swing.MigLayout;
-import alias.Alias;
-import alias.AliasEvent;
-import alias.AliasEvent.Event;
-import alias.AliasFactory;
-import alias.AliasModel;
-
public class AliasActionEditor extends Editor
{
private static final long serialVersionUID = 1L;
@@ -277,7 +266,7 @@ public class AliasActionEditor extends Editor
{
int option = JOptionPane.showConfirmDialog(
EditorContainer.this,
- "Action settings have changed. Do you want to save these changes?",
+ "Action settings have changed. Do you want to save these changes?",
"Save Changes?",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE );
diff --git a/src/alias/action/AliasActionListener.java b/src/main/java/io/github/dsheirer/alias/action/AliasActionListener.java
similarity index 93%
rename from src/alias/action/AliasActionListener.java
rename to src/main/java/io/github/dsheirer/alias/action/AliasActionListener.java
index a967e446..36e863d7 100644
--- a/src/alias/action/AliasActionListener.java
+++ b/src/main/java/io/github/dsheirer/alias/action/AliasActionListener.java
@@ -15,9 +15,9 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
******************************************************************************/
-package alias.action;
+package io.github.dsheirer.alias.action;
-import alias.AliasEvent;
+import io.github.dsheirer.alias.AliasEvent;
/**
* Interface for receiving alias events. Each listener will receive
diff --git a/src/alias/action/AliasActionManager.java b/src/main/java/io/github/dsheirer/alias/action/AliasActionManager.java
similarity index 91%
rename from src/alias/action/AliasActionManager.java
rename to src/main/java/io/github/dsheirer/alias/action/AliasActionManager.java
index 0ba644d1..760122cb 100644
--- a/src/alias/action/AliasActionManager.java
+++ b/src/main/java/io/github/dsheirer/alias/action/AliasActionManager.java
@@ -16,12 +16,12 @@
* along with this program. If not, see
*
******************************************************************************/
-package alias.action;
+package io.github.dsheirer.alias.action;
-import alias.Alias;
-import message.Message;
-import sample.Listener;
-import util.ThreadPool;
+import io.github.dsheirer.alias.Alias;
+import io.github.dsheirer.message.Message;
+import io.github.dsheirer.sample.Listener;
+import io.github.dsheirer.util.ThreadPool;
import java.util.List;
diff --git a/src/alias/action/AliasActionType.java b/src/main/java/io/github/dsheirer/alias/action/AliasActionType.java
similarity index 96%
rename from src/alias/action/AliasActionType.java
rename to src/main/java/io/github/dsheirer/alias/action/AliasActionType.java
index b54ddb06..eee09f23 100644
--- a/src/alias/action/AliasActionType.java
+++ b/src/main/java/io/github/dsheirer/alias/action/AliasActionType.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
******************************************************************************/
-package alias.action;
+package io.github.dsheirer.alias.action;
public enum AliasActionType
{
diff --git a/src/alias/action/RecurringAction.java b/src/main/java/io/github/dsheirer/alias/action/RecurringAction.java
similarity index 88%
rename from src/alias/action/RecurringAction.java
rename to src/main/java/io/github/dsheirer/alias/action/RecurringAction.java
index c8e54d62..8847eddf 100644
--- a/src/alias/action/RecurringAction.java
+++ b/src/main/java/io/github/dsheirer/alias/action/RecurringAction.java
@@ -1,11 +1,11 @@
-package alias.action;
+package io.github.dsheirer.alias.action;
-import alias.Alias;
-import message.Message;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import io.github.dsheirer.alias.Alias;
+import io.github.dsheirer.message.Message;
import javax.swing.*;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlTransient;
import java.awt.*;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
@@ -14,11 +14,11 @@ import java.util.concurrent.atomic.AtomicBoolean;
public abstract class RecurringAction extends AliasAction
{
- @XmlTransient
+ @JsonIgnore
protected AtomicBoolean mRunning = new AtomicBoolean(false);
- @XmlTransient
+ @JsonIgnore
private ScheduledFuture> mPerpetualAction;
- @XmlTransient
+ @JsonIgnore
protected ScheduledExecutorService mScheduledExecutorService;
protected Interval mInterval = Interval.ONCE;
@@ -107,7 +107,7 @@ public abstract class RecurringAction extends AliasAction
}
}
- @XmlAttribute
+ @JacksonXmlProperty(isAttribute = true, localName = "period")
public int getPeriod()
{
return mPeriod;
@@ -118,7 +118,7 @@ public abstract class RecurringAction extends AliasAction
mPeriod = period;
}
- @XmlAttribute
+ @JacksonXmlProperty(isAttribute = true, localName = "interval")
public Interval getInterval()
{
return mInterval;
@@ -164,8 +164,8 @@ public abstract class RecurringAction extends AliasAction
@Override
public void run()
{
- /* Don't use the performThreadedAction() method, since this is
- * already running in a separate thread */
+ /* Don't use the performThreadedAction() method, since this is
+ * already running in a separate thread */
performAction(mAlias, mMessage);
}
}
diff --git a/src/main/java/io/github/dsheirer/alias/action/beep/BeepAction.java b/src/main/java/io/github/dsheirer/alias/action/beep/BeepAction.java
new file mode 100644
index 00000000..6a0717ac
--- /dev/null
+++ b/src/main/java/io/github/dsheirer/alias/action/beep/BeepAction.java
@@ -0,0 +1,30 @@
+package io.github.dsheirer.alias.action.beep;
+
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import io.github.dsheirer.alias.Alias;
+import io.github.dsheirer.alias.action.AliasActionType;
+import io.github.dsheirer.alias.action.RecurringAction;
+import io.github.dsheirer.message.Message;
+
+public class BeepAction extends RecurringAction
+{
+
+ @JacksonXmlProperty(isAttribute = true, localName = "type", namespace = "http://www.w3.org/2001/XMLSchema-instance")
+ @Override
+ public AliasActionType getType()
+ {
+ return AliasActionType.BEEP;
+ }
+
+ @Override
+ public void performAction(Alias alias, Message message )
+ {
+ System.out.println( "\007" );
+ }
+
+ @Override
+ public String toString()
+ {
+ return "Beep";
+ }
+}
diff --git a/src/alias/action/beep/BeepActionEditor.java b/src/main/java/io/github/dsheirer/alias/action/beep/BeepActionEditor.java
similarity index 86%
rename from src/alias/action/beep/BeepActionEditor.java
rename to src/main/java/io/github/dsheirer/alias/action/beep/BeepActionEditor.java
index 1f47f9aa..109eea70 100644
--- a/src/alias/action/beep/BeepActionEditor.java
+++ b/src/main/java/io/github/dsheirer/alias/action/beep/BeepActionEditor.java
@@ -15,30 +15,22 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
******************************************************************************/
-package alias.action.beep;
+package io.github.dsheirer.alias.action.beep;
-import gui.editor.DocumentListenerEditor;
+import io.github.dsheirer.alias.action.AliasAction;
+import io.github.dsheirer.alias.action.RecurringAction;
+import io.github.dsheirer.gui.editor.DocumentListenerEditor;
+import net.miginfocom.swing.MigLayout;
-import java.awt.Color;
-import java.awt.Cursor;
+import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JSlider;
-import javax.swing.SpinnerModel;
-import javax.swing.SpinnerNumberModel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-
-import net.miginfocom.swing.MigLayout;
-import alias.action.AliasAction;
-import alias.action.RecurringAction.Interval;
-
public class BeepActionEditor extends DocumentListenerEditor
{
private static final long serialVersionUID = 1L;
@@ -57,7 +49,7 @@ public class BeepActionEditor extends DocumentListenerEditor
+ "for 15 seconds after you click OK.
"
+ "