diff --git a/.classpath b/.classpath index 6dd3809226..6222272a8d 100644 --- a/.classpath +++ b/.classpath @@ -1,19 +1,19 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/.externalToolBuilders/org.eclipse.jdt.core.javabuilder.launch b/.externalToolBuilders/org.eclipse.jdt.core.javabuilder.launch new file mode 100644 index 0000000000..4179cd69fb --- /dev/null +++ b/.externalToolBuilders/org.eclipse.jdt.core.javabuilder.launch @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000000..c770ebd9db --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,65 @@ +name: Build WorldWind Java + +on: + push: + branches: [ main, develop ] + pull_request: + branches: [ main, develop ] + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + java-version: [11] + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up JDK ${{ matrix.java-version }} + uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.java-version }} + distribution: 'temurin' + + - name: Cache Gradle packages + uses: actions/cache@v4 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Make gradlew executable + run: chmod +x ./gradlew + + - name: Build with Gradle + run: ./gradlew build --no-daemon --warning-mode all + + - name: Run tests + run: ./gradlew test --no-daemon --warning-mode all + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + if: matrix.java-version == 11 + with: + name: worldwind-java-build-${{ github.sha }} + path: | + build/libs/ + worldwind-*.jar + worldwindx-*.jar + retention-days: 30 + + - name: Upload test results + uses: actions/upload-artifact@v4 + if: always() + with: + name: test-results-java-${{ matrix.java-version }}-${{ github.sha }} + path: | + build/test-results/ + build/reports/ + retention-days: 30 diff --git a/.gitignore b/.gitignore index 87d7001729..f78ae5a09f 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,15 @@ classes testClasses worldwind.jar -worldwindx.jar \ No newline at end of file +<<<<<<< HEAD +worldwindx.jar + +gradle +gradlew +gradlew.bat +.gradle +.nb-gradle +/bin/ +======= +worldwindx.jar +>>>>>>> 57b265b6dc19cccf73759b7e3a41ef452b3742d7 diff --git a/.project b/.project index 6cdbe3a9f0..70adacd584 100644 --- a/.project +++ b/.project @@ -1,6 +1,6 @@ - worldwind + worldwind-WorldWindJava @@ -15,9 +15,30 @@ + + org.eclipse.ui.externaltools.ExternalToolBuilder + full,incremental, + + + LaunchConfigHandle + <project>/.externalToolBuilders/org.eclipse.jdt.core.javabuilder.launch + + + org.eclipse.jdt.core.javanature org.eclipse.buildship.core.gradleprojectnature + + + 1757090846118 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs index 7b8f97273d..d52cd4e1e9 100644 --- a/.settings/org.eclipse.buildship.core.prefs +++ b/.settings/org.eclipse.buildship.core.prefs @@ -1,13 +1,13 @@ -arguments= -auto.sync=false +arguments=--init-script C\:\\Users\\tlund\\AppData\\Roaming\\Cursor\\User\\globalStorage\\redhat.java\\1.45.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\init\\init.gradle --init-script C\:\\Users\\tlund\\AppData\\Roaming\\Cursor\\User\\globalStorage\\redhat.java\\1.45.0\\config_win\\org.eclipse.osgi\\58\\0\\.cp\\gradle\\protobuf\\init.gradle +auto.sync=true build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) connection.project.dir= eclipse.preferences.version=1 gradle.user.home= -java.home= +java.home=C\:/Program Files/Zulu/zulu-17 jvm.arguments= offline.mode=false -override.workspace.settings=false -show.console.view=false -show.executions.view=false +override.workspace.settings=true +show.console.view=true +show.executions.view=true diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000000..bbf9f297a4 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,5 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=ignore +org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 +org.eclipse.jdt.core.compiler.compliance=17 +org.eclipse.jdt.core.compiler.source=17 diff --git a/.settings/org.eclipse.ltk.core.refactoring.prefs b/.settings/org.eclipse.ltk.core.refactoring.prefs new file mode 100644 index 0000000000..b196c64a34 --- /dev/null +++ b/.settings/org.eclipse.ltk.core.refactoring.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false diff --git a/.vscode/java.project b/.vscode/java.project index af07472977..51bc2a2905 100644 --- a/.vscode/java.project +++ b/.vscode/java.project @@ -27,5 +27,5 @@ "jackson-core-asl.jar", "junit-4.5.jar" ], - "javaVersion": "11" + "javaVersion": "17" } diff --git a/.vscode/launch.json b/.vscode/launch.json index a006970d07..0a77eb3a77 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,12 +1,16 @@ { "version": "0.2.0", "configurations": [ + { "type": "java", "name": "WorldWindow", "request": "launch", "mainClass": "gov.nasa.worldwindx.applications.worldwindow.WorldWindow", - "projectName": "worldwind-WorldWindJava" + + "projectName": "worldwind-WorldWindJava", + "vmArgs": "-Djava.util.logging.config.file=logging.properties --add-exports java.base/java.lang=ALL-UNNAMED --add-exports java.desktop/sun.awt=ALL-UNNAMED --add-exports java.desktop/sun.java2d=ALL-UNNAMED" + }, { "type": "java", @@ -15,7 +19,7 @@ "mainClass": "gov.nasa.worldwindx.applications.worldwindow.WorldWindow", "projectName": "WorldWindJava", "args": "", - "vmArgs": "-Djava.util.logging.config.file=logging.properties", + "vmArgs": "-Djava.util.logging.config.file=logging.properties --add-exports java.base/java.lang=ALL-UNNAMED --add-exports java.desktop/sun.awt=ALL-UNNAMED --add-exports java.desktop/sun.java2d=ALL-UNNAMED", "cwd": "${workspaceFolder}", "console": "integratedTerminal", "env": { diff --git a/.vscode/settings.json b/.vscode/settings.json index c919bddf68..c2d2eaaed2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -29,11 +29,11 @@ "java.project.importOnFirstTimeStartup": "automatic", "java.import.gradle.enabled": true, "java.import.gradle.wrapper.enabled": true, - "java.import.gradle.java.home": null, + "java.import.gradle.java.home": "", "java.import.gradle.offline.enabled": false, "java.import.gradle.arguments": "", "java.import.gradle.jvmArguments": "", - "java.import.gradle.user.home": null, + "java.import.gradle.user.home": "", "java.import.gradle.importedProjects": [], "java.import.gradle.excludedProjects": [], "java.import.gradle.nestedProjects": true, diff --git a/README_DEVELOPER.txt b/README_DEVELOPER.txt index 697215de4a..e5d5610647 100644 --- a/README_DEVELOPER.txt +++ b/README_DEVELOPER.txt @@ -38,8 +38,8 @@ The JOGL library provides WorldWind Java with (1) a Java binding to the OpenGL A with Java's AWT and Swing windowing toolkits: http://jogamp.org/jogl/www/ -WorldWind Java uses JOGL v2.4, released on March 7th, 2020 and downloaded from: -https://jogamp.org/deployment/v2.4.0-rc-20200307/archive/jogamp-all-platforms.7z +WorldWind Java uses JOGL v2.6.0, released in 2024 and downloaded from: +https://jogamp.org/deployment/v2.6.0/archive/jogamp-all-platforms.7z The JOGL library compiled JAR files and README files are checked into the WorldWind Java source, distributed with all WorldWind Java builds and included in the WorldWind Java Web Start deployment. This is necessary in order ensure diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt index c92a05cca0..7f75619321 100644 --- a/RELEASE_NOTES.txt +++ b/RELEASE_NOTES.txt @@ -9,7 +9,7 @@ WorldWind's API remains unchanged in this release and we are committed to mainta The primary goal of the WorldWind Java (WWJ) v2.2.0 release is to modernize the SDK after a period of inactivity. During this process some defects were addressed as well. Highlights of v2.2.0: - Upgrade to Java 11 -- Upgrade to the OpenGL layer (JOGL) 2.4 +- Upgrade to the OpenGL layer (JOGL) 2.6.0 - Switch to the Apache 2.0 license - Deprecation of unsupported functionality such as Applets, WebStart and WebView. @@ -17,7 +17,7 @@ WorldWind's API remains largely unchanged in this release and we are committed t The prior release of WorldWind Java, v2.1.0, was compiled with Java 8. The decision was made to upgrade WWJ to Java 11 based on questionable support options for Java 8 at the time. This situation has evolved over time and we are evaluating whether a Java 8 version of WWJ is desirable. Your feedback is welcome. -Migrating to Java 11 and JOGL 2.4 went relatively smoothly. Primary areas of work: +Migrating to Java 17 and JOGL 2.6.0 went relatively smoothly. Primary areas of work: - The package names for JOGL have changed although the API remains relatively consistent. - Creating work alike code to replace the use of unpublished JRE APIs that now throw an access exception. For example, setting the java library path system property. Discussions around the types of changes that need to be made when moving from 8 to 11 are broadly available on the Web. diff --git a/bin/.gitignore b/bin/.gitignore deleted file mode 100644 index 7ac70cd798..0000000000 --- a/bin/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/main/ -/test/ -/default/ diff --git a/build.gradle b/build.gradle index 5deaf56ac6..b9026b564a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,8 +1,16 @@ -apply plugin: 'java-library' -apply plugin: 'maven-publish' +plugins { + id 'java-library' + id 'maven-publish' +} group = 'earth.worldwind' -version = '2.3.1' + (project.hasProperty('snapshot') ? '-SNAPSHOT' : '') +version = '2.4.0' + (project.hasProperty('snapshot') ? '-SNAPSHOT' : '') + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} ant { property(file: 'release-build.properties') @@ -10,10 +18,10 @@ ant { } ext { - joglVersion = '2.5.0' + joglVersion = '2.6.0' gdalVersion = '3.10.0' - jacksonVersion = '1.9.13' - junitVersion = '4.5' + jacksonVersion = '2.17.0' + junitVersion = '4.13.2' } repositories { @@ -23,8 +31,11 @@ repositories { } dependencies { - implementation "org.jogamp.jogl:jogl-all-main:$project.joglVersion" - implementation "org.jogamp.gluegen:gluegen-rt-main:$project.joglVersion" + //implementation "org.jogamp.jogl:jogl-all-main:$project.joglVersion" + //implementation "org.jogamp.gluegen:gluegen-rt-main:$project.joglVersion" + // Use local JOGL files instead of Maven dependencies + implementation files("jogl-all.jar") + implementation files("gluegen-rt.jar") if (project.hasProperty('systemGDAL')) { implementation files("${ant.properties['gdal.jar.dir']}/gdal.jar") @@ -32,7 +43,8 @@ dependencies { implementation "org.gdal:gdal:$project.gdalVersion" } - implementation "org.codehaus.jackson:jackson-core-asl:$project.jacksonVersion" + implementation "com.fasterxml.jackson.core:jackson-core:$project.jacksonVersion" + implementation "com.fasterxml.jackson.core:jackson-databind:$project.jacksonVersion" testImplementation "junit:junit:$project.junitVersion" } @@ -40,7 +52,7 @@ dependencies { task sourcesJar(type: Jar, dependsOn: classes) { group = 'build' description = 'Assembles a jar archive containing the sources.' - classifier = 'sources' + archiveClassifier = 'sources' from (sourceSets.main.allSource) { include '**/*.java' exclude 'config/**' @@ -52,7 +64,7 @@ task sourcesJar(type: Jar, dependsOn: classes) { task extensionsJar(type: Jar) { group = 'build' description = 'Assembles a jar archive containing the extension classes.' - baseName = 'worldwindx' + archiveBaseName = 'worldwindx' from (sourceSets.main.output) { exclude 'com/**' exclude 'config/**' @@ -62,8 +74,8 @@ task extensionsJar(type: Jar) { doLast { copy { from "$buildDir/libs/$extensionsJar.archiveFileName" - into project.projectDir - rename "$extensionsJar.archiveFileName", "$extensionsJar.baseName.$extensionsJar.extension" + into projectDir + rename "$extensionsJar.archiveFileName", "$extensionsJar.archiveBaseName.$extensionsJar.archiveExtension" } } } @@ -71,7 +83,7 @@ task extensionsJar(type: Jar) { task javadocJar(type: Jar, dependsOn: javadoc) { group = 'build' description = 'Assembles a jar archive containing the javadocs.' - classifier = 'javadoc' + archiveClassifier = 'javadoc' from javadoc.destinationDir } @@ -101,9 +113,9 @@ publishing { from components.java artifact sourcesJar artifact javadocJar - groupId project.group - artifactId project.name - version project.version + groupId = project.group + artifactId = project.name + version = project.version pom.withXml { def root = asNode() root.appendNode('description', @@ -138,6 +150,11 @@ sourceSets { compileJava { options.debug = !project.hasProperty('release') + options.release = 17 +} + +compileTestJava { + options.release = 17 } test { @@ -152,15 +169,15 @@ jar { doLast { copy { from "$buildDir/libs/$jar.archiveFileName" - into project.projectDir - rename "$jar.archiveFileName", "$jar.baseName.$jar.extension" + into projectDir + rename "$jar.archiveFileName", "$jar.archiveBaseName.$jar.archiveExtension" } } } javadoc { options { - overview = "$project.projectDir/src/overview.html" + overview = "$projectDir/src/overview.html" windowTitle = 'WorldWindJava API' title = 'NASA WorldWind Java-Community Edition' header = 'NASA WorldWind-CE' @@ -169,6 +186,11 @@ javadoc { version = false author = false use = true + // Make Javadoc more lenient to handle HTML issues + addBooleanOption('Xdoclint:none', true) + addBooleanOption('quiet', true) + // Java 17 compatibility + addStringOption('source', '17') } exclude 'com/**' exclude 'gov/nasa/worldwind/formats/**' @@ -259,14 +281,32 @@ task milStd2525Zip(type: Zip, dependsOn: processMilStd2525SVGs) { def milStd2525PngDir = file(ant.properties['milstd2525.png.dir']) from milStd2525PngDir include '**/*' - archiveName 'milstd2525-symbols.zip' - destinationDir milStd2525OutDir + archiveFileName = 'milstd2525-symbols.zip' + destinationDirectory = milStd2525OutDir } task runLayerManager(type: JavaExec, dependsOn: classes) { group = 'run' description = 'Runs the LayerManager example app.' classpath sourceSets.main.runtimeClasspath - main = 'gov.nasa.worldwindx.examples.layermanager.LayerManagerApp' - systemProperty 'java.util.logging.config.file', "$project.projectDir/logging.properties" + mainClass = 'gov.nasa.worldwindx.examples.layermanager.LayerManagerApp' + systemProperty 'java.util.logging.config.file', "$projectDir/logging.properties" + jvmArgs = [ + '--add-exports', 'java.base/java.lang=ALL-UNNAMED', + '--add-exports', 'java.desktop/sun.awt=ALL-UNNAMED', + '--add-exports', 'java.desktop/sun.java2d=ALL-UNNAMED' + ] } + +task runWorldWindow(type: JavaExec, dependsOn: classes) { + group = 'run' + description = 'Runs the WorldWindow application with Java 17 compatibility options.' + classpath sourceSets.main.runtimeClasspath + mainClass = 'gov.nasa.worldwindx.applications.worldwindow.WorldWindow' + systemProperty 'java.util.logging.config.file', "$projectDir/logging.properties" + jvmArgs = [ + '--add-exports', 'java.base/java.lang=ALL-UNNAMED', + '--add-exports', 'java.desktop/sun.awt=ALL-UNNAMED', + '--add-exports', 'java.desktop/sun.java2d=ALL-UNNAMED' + ] +} \ No newline at end of file diff --git a/gluegen-rt-natives-linux-amd64.jar b/gluegen-rt-natives-linux-amd64.jar new file mode 100644 index 0000000000..3f68bf6a3c Binary files /dev/null and b/gluegen-rt-natives-linux-amd64.jar differ diff --git a/gluegen-rt-natives-macosx-universal.jar b/gluegen-rt-natives-macosx-universal.jar new file mode 100644 index 0000000000..c617c389b6 Binary files /dev/null and b/gluegen-rt-natives-macosx-universal.jar differ diff --git a/gluegen-rt-natives-windows-amd64.jar b/gluegen-rt-natives-windows-amd64.jar new file mode 100644 index 0000000000..2d0fc8d8ef Binary files /dev/null and b/gluegen-rt-natives-windows-amd64.jar differ diff --git a/gluegen-rt.jar b/gluegen-rt.jar new file mode 100644 index 0000000000..5d39088388 Binary files /dev/null and b/gluegen-rt.jar differ diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000000..a2745f670f --- /dev/null +++ b/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m +org.gradle.daemon=false +org.gradle.parallel=false diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f398c33c4b..fa5602a8e6 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/install jogl artifacts to local m2.bat b/install jogl artifacts to local m2.bat new file mode 100644 index 0000000000..973c5fed89 --- /dev/null +++ b/install jogl artifacts to local m2.bat @@ -0,0 +1,15 @@ +mvn install:install-file -Dfile=D:\worskpaces\workspaceHackaton2015\WorldWindJava_CE\WorldWindJava\worldwind-2.4.0.jar -DgroupId=com.ursulagis -DartifactId=worldwind -Dversion=2.4.0 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=D:\worskpaces\workspaceHackaton2015\WorldWindJava_CE\WorldWindJava\worldwindx-2.4.0.jar -DgroupId=com.ursulagis -DartifactId=worldwindx -Dversion=2.4.0 -Dpackaging=jar -DgeneratePom=true + +mvn install:install-file -Dfile=D:\worskpaces\workspaceHackaton2015\WorldWindJava_CE\WorldWindJava\gluegen-rt.jar -DgroupId=com.ursulagis -DartifactId=gluegen-rt -Dversion=2.4.0 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=D:\worskpaces\workspaceHackaton2015\WorldWindJava_CE\WorldWindJava\gluegen-rt-natives-linux-amd64.jar -DgroupId=com.ursulagis -DartifactId=gluegen-rt-natives-linux-amd64 -Dversion=2.4.0 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=D:\worskpaces\workspaceHackaton2015\WorldWindJava_CE\WorldWindJava\gluegen-rt-natives-linux-i586.jar -DgroupId=com.ursulagis -DartifactId=gluegen-rt-natives-linux-i586 -Dversion=2.4.0 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=D:\worskpaces\workspaceHackaton2015\WorldWindJava_CE\WorldWindJava\gluegen-rt-natives-macosx-universal.jar -DgroupId=com.ursulagis -DartifactId=gluegen-rt-natives-macosx-universal -Dversion=2.4.0 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=D:\worskpaces\workspaceHackaton2015\WorldWindJava_CE\WorldWindJava\gluegen-rt-natives-windows-amd64.jar -DgroupId=com.ursulagis -DartifactId=gluegen-rt-natives-windows-amd64 -Dversion=2.4.0 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=D:\worskpaces\workspaceHackaton2015\WorldWindJava_CE\WorldWindJava\gluegen-rt-natives-windows-i586.jar -DgroupId=com.ursulagis -DartifactId=gluegen-rt-natives-windows-i586 -Dversion=2.4.0 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=D:\worskpaces\workspaceHackaton2015\WorldWindJava_CE\WorldWindJava\jogl-all.jar -DgroupId=com.ursulagis -DartifactId=jogl-all -Dversion=2.4.0 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=D:\worskpaces\workspaceHackaton2015\WorldWindJava_CE\WorldWindJava\jogl-all-natives-linux-amd64.jar -DgroupId=com.ursulagis -DartifactId=jogl-all-natives-linux-amd64 -Dversion=2.4.0 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=D:\worskpaces\workspaceHackaton2015\WorldWindJava_CE\WorldWindJava\jogl-all-natives-linux-i586.jar -DgroupId=com.ursulagis -DartifactId=jogl-all-natives-linux-i586 -Dversion=2.4.0 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=D:\worskpaces\workspaceHackaton2015\WorldWindJava_CE\WorldWindJava\jogl-all-natives-macosx-universal.jar -DgroupId=com.ursulagis -DartifactId=jogl-all-natives-macosx-universal -Dversion=2.4.0 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=D:\worskpaces\workspaceHackaton2015\WorldWindJava_CE\WorldWindJava\jogl-all-natives-windows-amd64.jar -DgroupId=com.ursulagis -DartifactId=jogl-all-natives-windows-amd64 -Dversion=2.4.0 -Dpackaging=jar -DgeneratePom=true +mvn install:install-file -Dfile=D:\worskpaces\workspaceHackaton2015\WorldWindJava_CE\WorldWindJava\jogl-all-natives-windows-i586.jar -DgroupId=com.ursulagis -DartifactId=jogl-all-natives-windows-i586 -Dversion=2.4.0 -Dpackaging=jar -DgeneratePom=true \ No newline at end of file diff --git a/jogl-all-natives-linux-amd64.jar b/jogl-all-natives-linux-amd64.jar new file mode 100644 index 0000000000..2251e86bab Binary files /dev/null and b/jogl-all-natives-linux-amd64.jar differ diff --git a/jogl-all-natives-macosx-universal.jar b/jogl-all-natives-macosx-universal.jar new file mode 100644 index 0000000000..27eca24dc1 Binary files /dev/null and b/jogl-all-natives-macosx-universal.jar differ diff --git a/jogl-all-natives-windows-amd64.jar b/jogl-all-natives-windows-amd64.jar new file mode 100644 index 0000000000..9c2dc2f6a6 Binary files /dev/null and b/jogl-all-natives-windows-amd64.jar differ diff --git a/jogl-all.jar b/jogl-all.jar new file mode 100644 index 0000000000..ec7f0202af Binary files /dev/null and b/jogl-all.jar differ diff --git a/junit-4.5.jar b/junit-4.5.jar new file mode 100644 index 0000000000..733921623d Binary files /dev/null and b/junit-4.5.jar differ diff --git a/lib-external/gdal/gdal.jar b/lib-external/gdal/gdal.jar new file mode 100644 index 0000000000..8443c2efc2 Binary files /dev/null and b/lib-external/gdal/gdal.jar differ diff --git a/lib-external/gdal/gdalalljni.dll b/lib-external/gdal/gdalalljni.dll new file mode 100644 index 0000000000..4456e00f6a Binary files /dev/null and b/lib-external/gdal/gdalalljni.dll differ diff --git a/nbproject/project.properties b/nbproject/project.properties index fab181db51..e7438166ed 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -56,8 +56,8 @@ javac.modulepath= javac.processormodulepath= javac.processorpath=\ ${javac.classpath} -javac.source=11 -javac.target=11 +javac.source=17 +javac.target=17 javac.test.classpath=\ ${javac.classpath}:\ ${build.classes.dir} diff --git a/release-build.properties b/release-build.properties index cde1c0e4de..1a2dba62d2 100644 --- a/release-build.properties +++ b/release-build.properties @@ -38,7 +38,7 @@ worldwind.classes.dir=${worldwind.build.dir}/classes worldwind.doc.dir=${worldwind.build.dir}/doc worldwind.jar.dir=${worldwind.build.dir}/jar worldwind.test.results.dir=${worldwind.build.dir}/test-results -worldwind.jdk=11 +worldwind.jdk=17 #worldwind.exclude.jackson=true # MIL-STD-2525 package build properties diff --git a/release-build.xml b/release-build.xml index 9810ad732d..7fc9a726a1 100644 --- a/release-build.xml +++ b/release-build.xml @@ -127,7 +127,7 @@ - + diff --git a/run-demo.bat b/run-demo.bat index cbc67c0b8d..5edf474ddc 100755 --- a/run-demo.bat +++ b/run-demo.bat @@ -25,9 +25,9 @@ REM A complete listing of 3rd Party software notices and licenses included in REM NASA World Wind Java (WWJ) can be found in the WorldWindJava-v2.2 3rd-party REM notices and licenses PDF found in code directory. -REM Default to the ApplicationTemplate example if a class name is not provided -IF "%1"=="" (SET WWDEMO=gov.nasa.worldwindx.examples.ApplicationTemplate) ELSE (SET WWDEMO=%*) +REM Default to the WorldWindow application if a class name is not provided +IF "%1"=="" (SET WWDEMO=gov.nasa.worldwindx.applications.worldwindow.WorldWindow) ELSE (SET WWDEMO=%*) -REM Run a WorldWind Demo +REM Run a WorldWind Demo with Java 17 compatibility @echo Running %WWDEMO% -java -Xmx1024m -Dsun.java2d.noddraw=true -classpath .\worldwind.jar;.\worldwindx.jar;.\gdal.jar;.\jogl-all.jar;.\gluegen-rt.jar %WWDEMO% +java -Xmx1024m -Dsun.java2d.noddraw=true --add-exports java.base/java.lang=ALL-UNNAMED --add-exports java.desktop/sun.awt=ALL-UNNAMED --add-exports java.desktop/sun.java2d=ALL-UNNAMED -Djava.util.logging.config.file=logging.properties -classpath .\build\classes\java\main;.\build\libs\worldwind-2.4.0.jar;.\build\libs\worldwindx-2.4.0.jar;.\gdal.jar;.\jogl-all.jar;.\gluegen-rt.jar %WWDEMO% diff --git a/run_with_java17.bat b/run_with_java17.bat new file mode 100644 index 0000000000..e8fe64b261 --- /dev/null +++ b/run_with_java17.bat @@ -0,0 +1,26 @@ +@echo off +echo Running WorldWind Java with Java 17 compatibility options... +echo. + +REM Set Java 17 JVM options for JOGL compatibility +set JVM_OPTS=--add-exports java.base/java.lang=ALL-UNNAMED --add-exports java.desktop/sun.awt=ALL-UNNAMED --add-exports java.desktop/sun.java2d=ALL-UNNAMED + +REM Check if Java is available +java -version >nul 2>&1 +if %errorlevel% neq 0 ( + echo ERROR: Java is not found in PATH. Please ensure Java 17 is installed and configured. + pause + exit /b 1 +) + +echo Java version: +java -version +echo. + +echo Starting WorldWind Java with JVM options: %JVM_OPTS% +echo. + +REM Run the application with JVM options +java %JVM_OPTS% -cp "build/libs/*;jogl-all.jar;gluegen-rt.jar;worldwind-2.4.0.jar;worldwindx-2.4.0.jar" gov.nasa.worldwindx.applications.worldwindow.WorldWindow + +pause diff --git a/src/config/worldwind.layers.xml b/src/config/worldwind.layers.xml index 49e9db44b4..8b4535dc95 100644 --- a/src/config/worldwind.layers.xml +++ b/src/config/worldwind.layers.xml @@ -41,29 +41,29 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - \ No newline at end of file + + diff --git a/src/config/worldwind.xml b/src/config/worldwind.xml index dc95479b47..774ca09333 100644 --- a/src/config/worldwind.xml +++ b/src/config/worldwind.xml @@ -117,10 +117,11 @@ - + See https://goworldwind.org/developers-guide/symbology/tactical-symbols/#offline-use for more information on how + to configure a local symbol repository. + Examples: http://myserver.com/milstd2525/ (web server) + jar:file:milstd2525-symbols.zip! (local zip archive) --> + + + \ No newline at end of file diff --git a/src/gov/nasa/worldwind/awt/WorldWindowGLJPanel.java b/src/gov/nasa/worldwind/awt/WorldWindowGLJPanel.java index 0b2a37322c..fbcac4f605 100644 --- a/src/gov/nasa/worldwind/awt/WorldWindowGLJPanel.java +++ b/src/gov/nasa/worldwind/awt/WorldWindowGLJPanel.java @@ -94,6 +94,7 @@ public WorldWindowGLJPanel() this.createDefaultInputHandler(); WorldWind.addPropertyChangeListener(WorldWind.SHUTDOWN_EVENT, this); this.wwd.endInitialization(); + } catch (Exception e) { diff --git a/src/gov/nasa/worldwind/formats/geojson/GeoJSONDoc.java b/src/gov/nasa/worldwind/formats/geojson/GeoJSONDoc.java index 62cc433c22..13b532a8f2 100644 --- a/src/gov/nasa/worldwind/formats/geojson/GeoJSONDoc.java +++ b/src/gov/nasa/worldwind/formats/geojson/GeoJSONDoc.java @@ -28,7 +28,7 @@ package gov.nasa.worldwind.formats.geojson; import gov.nasa.worldwind.formats.json.*; -import org.codehaus.jackson.JsonParser; +import com.fasterxml.jackson.core.JsonParser; import java.io.IOException; diff --git a/src/gov/nasa/worldwind/formats/geojson/GeoJSONEventParserContext.java b/src/gov/nasa/worldwind/formats/geojson/GeoJSONEventParserContext.java index d15f507477..c366280b11 100644 --- a/src/gov/nasa/worldwind/formats/geojson/GeoJSONEventParserContext.java +++ b/src/gov/nasa/worldwind/formats/geojson/GeoJSONEventParserContext.java @@ -27,7 +27,7 @@ */ package gov.nasa.worldwind.formats.geojson; -import org.codehaus.jackson.JsonParser; +import com.fasterxml.jackson.core.JsonParser; import gov.nasa.worldwind.formats.json.*; import java.io.IOException; diff --git a/src/gov/nasa/worldwind/formats/json/BasicJSONEvent.java b/src/gov/nasa/worldwind/formats/json/BasicJSONEvent.java index 5ca60fddcf..7d9f773b31 100644 --- a/src/gov/nasa/worldwind/formats/json/BasicJSONEvent.java +++ b/src/gov/nasa/worldwind/formats/json/BasicJSONEvent.java @@ -28,7 +28,7 @@ package gov.nasa.worldwind.formats.json; import gov.nasa.worldwind.util.Logging; -import org.codehaus.jackson.*; +import com.fasterxml.jackson.core.*; import java.io.IOException; diff --git a/src/gov/nasa/worldwind/formats/json/BasicJSONEventParserContext.java b/src/gov/nasa/worldwind/formats/json/BasicJSONEventParserContext.java index fc577ff1d8..dbcf3942a2 100644 --- a/src/gov/nasa/worldwind/formats/json/BasicJSONEventParserContext.java +++ b/src/gov/nasa/worldwind/formats/json/BasicJSONEventParserContext.java @@ -28,7 +28,7 @@ package gov.nasa.worldwind.formats.json; import gov.nasa.worldwind.util.Logging; -import org.codehaus.jackson.*; +import com.fasterxml.jackson.core.*; import java.io.IOException; import java.util.*; diff --git a/src/gov/nasa/worldwind/formats/json/JSONDoc.java b/src/gov/nasa/worldwind/formats/json/JSONDoc.java index ea01056b56..87a3e81ec5 100644 --- a/src/gov/nasa/worldwind/formats/json/JSONDoc.java +++ b/src/gov/nasa/worldwind/formats/json/JSONDoc.java @@ -29,7 +29,7 @@ import gov.nasa.worldwind.exception.WWRuntimeException; import gov.nasa.worldwind.util.*; -import org.codehaus.jackson.*; +import com.fasterxml.jackson.core.*; import java.io.*; diff --git a/src/gov/nasa/worldwind/formats/tiff/GeotiffReader.java b/src/gov/nasa/worldwind/formats/tiff/GeotiffReader.java index 63fdbda004..af2713a70e 100644 --- a/src/gov/nasa/worldwind/formats/tiff/GeotiffReader.java +++ b/src/gov/nasa/worldwind/formats/tiff/GeotiffReader.java @@ -41,6 +41,7 @@ import java.nio.*; import java.nio.channels.FileChannel; import java.util.ArrayList; +import java.util.Arrays; /** * @author brownrigg @@ -214,6 +215,7 @@ public DataRaster doRead(int imageIndex) throws IOException { tiff.rowsPerStrip = Integer.MAX_VALUE; } + tiff.planarConfig = Tiff.PlanarConfiguration.PLANAR; if (tiff.planarConfig != Tiff.PlanarConfiguration.PLANAR && tiff.planarConfig != Tiff.PlanarConfiguration.CHUNKY) { String msg = Logging.getMessage("GeotiffReader.InvalidIFDEntryValue", tiff.planarConfig, @@ -227,10 +229,13 @@ public DataRaster doRead(int imageIndex) throws IOException { switch (entry.tag) { case Tiff.Tag.STRIP_OFFSETS: stripOffsets = entry.getAsLongs(); + System.out.println("offsets= "+Arrays.toString(stripOffsets)); + //[384, 8232, 16080][462, 8222, 15982, 23742, 31502, 39262, 47022, 54782, 62542, 70302, 78062, 85822, 93582, 101342, 109102, 116862][504, 8372, 16240, 24108, 31976, 39844, 47712, 55580, 63448, 71316, 79184, 87052, 94920, 102788, 110656, 118524, 126392, 134260, 142128, 149996, 157864, 165732, 173600][396, 8396, 16396, 24396, 32396][504, 8372, 16240, 24108, 31976, 39844, 47712, 55580, 63448, 71316, 79184, 87052, 94920, 102788, 110656, 118524, 126392, 134260, 142128, 149996, 157864, 165732, 173600][504, 8372, 16240, 24108, 31976, 39844, 47712, 55580, 63448, 71316, 79184, 87052, 94920, 102788, 110656, 118524, 126392, 134260, 142128, 149996, 157864, 165732, 173600][384, 8232, 16080][384, 8232, 16080][504, 8372, 16240, 24108, 31976, 39844, 47712, 55580, 63448, 71316, 79184, 87052, 94920, 102788, 110656, 118524, 126392, 134260, 142128, 149996, 157864, 165732, 173600][504, 8372, 16240, 24108, 31976, 39844, 47712, 55580, 63448, 71316, 79184, 87052, 94920, 102788, 110656, 118524, 126392, 134260, 142128, 149996, 157864, 165732, 173600][504, 8372, 16240, 24108, 31976, 39844, 47712, 55580, 63448, 71316, 79184, 87052, 94920, 102788, 110656, 118524, 126392, 134260, 142128, 149996, 157864, 165732, 173600][504, 8372, 16240, 24108, 31976, 39844, 47712, 55580, 63448, 71316, 79184, 87052, 94920, 102788, 110656, 118524, 126392, 134260, 142128, 149996, 157864, 165732, 173600][462, 8222, 15982, 23742, 31502, 39262, 47022, 54782, 62542, 70302, 78062, 85822, 93582, 101342, 109102, 116862][384, 8232, 16080][504, 8372, 16240, 24108, 31976, 39844, 47712, 55580, 63448, 71316, 79184, 87052, 94920, 102788, 110656, 118524, 126392, 134260, 142128, 149996, 157864, 165732, 173600] break; case Tiff.Tag.STRIP_BYTE_COUNTS: stripCounts = entry.getAsLongs(); + System.out.println("stripCounts= "+Arrays.toString(stripCounts)); break; case Tiff.Tag.COLORMAP: @@ -241,6 +246,14 @@ public DataRaster doRead(int imageIndex) throws IOException { Logging.logger().finest(e.toString()); } } + + if (null == stripOffsets || 0 == stripOffsets.length) { + stripOffsets=new long[1]; + stripOffsets[0]=tiff.height*tiff.width; + stripCounts=new long[1]; + stripCounts[0]=1; + } + if (null == stripOffsets || 0 == stripOffsets.length) { String message = Logging.getMessage("GeotiffReader.MissingRequiredTag", "StripOffsets"); @@ -262,7 +275,11 @@ public DataRaster doRead(int imageIndex) throws IOException { if ((predictorEntry != null) && (predictorEntry.asLong() != 0)) { tiffDifferencing = true; } - } else if (notToday != null && notToday.asLong() != Tiff.Compression.NONE) { + + } + else if (notToday != null && notToday.asLong() != Tiff.Compression.NONE) + { + System.out.println("compression tag "+notToday.tag+" long "+notToday.asLong()); String message = Logging.getMessage("GeotiffReader.CompressionFormatNotSupported"); Logging.logger().severe(message); throw new IOException(message); diff --git a/src/gov/nasa/worldwind/layers/TerrainProfileLayer.java b/src/gov/nasa/worldwind/layers/TerrainProfileLayer.java index 149ab8c2eb..b80cd46102 100644 --- a/src/gov/nasa/worldwind/layers/TerrainProfileLayer.java +++ b/src/gov/nasa/worldwind/layers/TerrainProfileLayer.java @@ -1275,7 +1275,7 @@ protected Position computePickPosition(DrawContext dc, Vec4 locationSW, Dimensio if (this.pickedShape == null) { this.pickedShape = new Path(posList); this.pickedShape.setPathType(AVKey.LINEAR); - var attrs = new BasicShapeAttributes(); + BasicShapeAttributes attrs = new BasicShapeAttributes(); attrs.setOutlineWidth(2); attrs.setOutlineMaterial(new Material(new Color(this.color.getRed(), this.color.getGreen(), (int) (this.color.getBlue() * .8), (int) (255 * .8)))); @@ -1448,7 +1448,7 @@ protected void computeProfile(DrawContext dc) { if (this.selectionShape == null) { this.selectionShape = new Path(Arrays.asList(this.positions)); this.selectionShape.setSurfacePath(true); - var attrs = new BasicShapeAttributes(); + BasicShapeAttributes attrs = new BasicShapeAttributes(); attrs.setOutlineWidth(2); attrs.setOutlineMaterial(new Material(new Color(this.color.getRed(), this.color.getGreen(), (int) (this.color.getBlue() * .5), (int) (255 * .8)))); diff --git a/src/gov/nasa/worldwind/ogc/wms/WMSLogoURL.java b/src/gov/nasa/worldwind/ogc/wms/WMSLogoURL.java index 4325a261f1..6b38450f31 100644 --- a/src/gov/nasa/worldwind/ogc/wms/WMSLogoURL.java +++ b/src/gov/nasa/worldwind/ogc/wms/WMSLogoURL.java @@ -45,9 +45,9 @@ public class WMSLogoURL extends WMSLayerInfoURL protected Integer width; protected Integer height; - public WMSLogoURL(String namespaceURI) - { + public WMSLogoURL(String namespaceURI) { super(namespaceURI); + } @Override @@ -73,8 +73,11 @@ protected void doParseEventAttributes(XMLEventParserContext ctx, XMLEvent event, if (attr.getName().getLocalPart().equals("height") && attr.getValue() != null) { Integer i = WWUtil.convertStringToInteger(attr.getValue()); - if (i != null) - this.setHeight(i); + if (i != null) { + this.setHeight(i); + } else { + System.out.println("fallo parsear la altura para el logo de "+this.namespaceURI); + } } } } diff --git a/src/gov/nasa/worldwind/render/ContourLine.java b/src/gov/nasa/worldwind/render/ContourLine.java index 3e487e2684..3fed60b524 100644 --- a/src/gov/nasa/worldwind/render/ContourLine.java +++ b/src/gov/nasa/worldwind/render/ContourLine.java @@ -423,7 +423,7 @@ protected int makePathsConnected(DrawContext dc, ArrayList inter, line = new Path(positions); line.setNumSubsegments(0); line.setSurfacePath(true); - var attrs = new BasicShapeAttributes(); + BasicShapeAttributes attrs = new BasicShapeAttributes(); attrs.setOutlineWidth(this.getLineWidth()); attrs.setOutlineMaterial(new Material(this.getColor())); line.setAttributes(attrs); diff --git a/src/gov/nasa/worldwind/util/JOGLVersionInfo.java b/src/gov/nasa/worldwind/util/JOGLVersionInfo.java index ba6ab8e612..43d050b886 100644 --- a/src/gov/nasa/worldwind/util/JOGLVersionInfo.java +++ b/src/gov/nasa/worldwind/util/JOGLVersionInfo.java @@ -48,11 +48,11 @@ private static Package pkgInfo(ClassLoader classLoader, String pkgName, String c Package p = null; try { - classLoader.loadClass(pkgName + "." + className); + Class clase = classLoader.loadClass(pkgName + "." + className); // TODO: message logging - p = classLoader.getDefinedPackage(pkgName); - if (p == null) { + p = clase.getPackage();// p = classLoader.getDefinedPackage(pkgName); + if (pkgName == null) { System.out.println("WARNING: Package.getPackage(" + pkgName + ") is null"); } } catch (ClassNotFoundException e) { diff --git a/src/gov/nasa/worldwind/util/WWUtil.java b/src/gov/nasa/worldwind/util/WWUtil.java index abf9098d6c..e2a6193e71 100644 --- a/src/gov/nasa/worldwind/util/WWUtil.java +++ b/src/gov/nasa/worldwind/util/WWUtil.java @@ -58,7 +58,7 @@ public static Integer convertStringToInteger(String s) if (s == null) { String message = Logging.getMessage("nullValue.StringIsNull"); - Logging.logger().severe(message); + Logging.logger().fine(message); throw new IllegalArgumentException(message); } @@ -68,15 +68,20 @@ public static Integer convertStringToInteger(String s) { return null; } - - return Integer.valueOf(s); + Number n = NumberFormat.getInstance().parse(s); + return n.intValue(); + //return Integer.valueOf(s); } catch (NumberFormatException e) { String message = Logging.getMessage("generic.ConversionError", s); - Logging.logger().log(java.util.logging.Level.SEVERE, message, e); + Logging.logger().log(java.util.logging.Level.FINE, message, e); return null; - } + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } } /** diff --git a/src/gov/nasa/worldwind/util/measure/MeasureTool.java b/src/gov/nasa/worldwind/util/measure/MeasureTool.java index 65960b10c4..71112a5427 100644 --- a/src/gov/nasa/worldwind/util/measure/MeasureTool.java +++ b/src/gov/nasa/worldwind/util/measure/MeasureTool.java @@ -1777,7 +1777,7 @@ protected void updateMeasureShape() { this.line = new Path(); setFollowTerrain(this.isFollowTerrain()); this.line.setPathType(this.getPathType()); - var attrs = new BasicShapeAttributes(); + BasicShapeAttributes attrs = new BasicShapeAttributes(); attrs.setOutlineWidth(this.getLineWidth()); attrs.setOutlineMaterial(new Material(this.getLineColor())); this.line.setAttributes(attrs); diff --git a/src/gov/nasa/worldwind/util/measure/MeasureToolController.java b/src/gov/nasa/worldwind/util/measure/MeasureToolController.java index 6b9b8eba5f..b4b2a12912 100644 --- a/src/gov/nasa/worldwind/util/measure/MeasureToolController.java +++ b/src/gov/nasa/worldwind/util/measure/MeasureToolController.java @@ -43,7 +43,8 @@ * @see MeasureTool */ public class MeasureToolController extends MouseAdapter - implements MouseListener, MouseMotionListener, SelectListener, PositionListener, RenderingListener + implements MouseListener, MouseMotionListener, + SelectListener, PositionListener, RenderingListener { protected MeasureTool measureTool; @@ -219,10 +220,9 @@ public void mousePressed(MouseEvent mouseEvent) if (measureTool.addControlPoint() != null) // null when the cursor is off the globe { - if (measureTool.getControlPoints().size() == 1) - { - measureTool.addControlPoint(); // Simulate a second click - } +// if (measureTool.getControlPoints().size() == 1) { +// measureTool.addControlPoint(); // Simulate a second click +// } // Set the rubber band target to the last control point or the relevant control for regular shapes. if (measureTool.isRegularShape()) { @@ -256,8 +256,8 @@ public void mouseReleased(MouseEvent mouseEvent) { if (this.isArmed() && this.isUseRubberBand() && mouseEvent.getButton() == MouseEvent.BUTTON1) { - if (measureTool.getPositions().size() == 1) - measureTool.removeControlPoint(); +// if (measureTool.getPositions().size() == 1) +// measureTool.removeControlPoint(); this.setActive(false); rubberBandTarget = null; // Disarm after second control point of a line or regular shape diff --git a/src/gov/nasa/worldwindx/applications/glider/GliderImageLayer.java b/src/gov/nasa/worldwindx/applications/glider/GliderImageLayer.java index 46ec864861..72baf93fc3 100644 --- a/src/gov/nasa/worldwindx/applications/glider/GliderImageLayer.java +++ b/src/gov/nasa/worldwindx/applications/glider/GliderImageLayer.java @@ -171,7 +171,7 @@ protected static List makePaths(GliderRegionOfInterest.RegionSet reg for (GliderRegionOfInterest region : regions.regions) { Path p = new Path(region.getLocations(), altitude); - var attrs = new BasicShapeAttributes(); + BasicShapeAttributes attrs = new BasicShapeAttributes(); attrs.setOutlineMaterial(new Material(region.getColor())); p.setAttributes(attrs); p.setSurfacePath(true); diff --git a/src/gov/nasa/worldwindx/applications/sar/SAR2.java b/src/gov/nasa/worldwindx/applications/sar/SAR2.java index 12bedb563d..4e823a70a4 100644 --- a/src/gov/nasa/worldwindx/applications/sar/SAR2.java +++ b/src/gov/nasa/worldwindx/applications/sar/SAR2.java @@ -807,7 +807,7 @@ public void windowClosed(WindowEvent event) newTrack.setText("New Track..."); newTrack.setMnemonic('N'); newTrack.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); newTrack.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -822,7 +822,7 @@ public void actionPerformed(ActionEvent e) openTrackFile.setText("Open Track File..."); openTrackFile.setMnemonic('O'); openTrackFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); openTrackFile.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -837,7 +837,7 @@ public void actionPerformed(ActionEvent e) openTrackURL.setText("Open Track URL..."); openTrackURL.setMnemonic('U'); openTrackURL.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_U, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); openTrackURL.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -853,7 +853,7 @@ public void actionPerformed(ActionEvent e) removeTrack.setMnemonic('C'); removeTrack.setAccelerator(KeyStroke.getKeyStroke( Configuration.isMacOS() ? KeyEvent.VK_W : KeyEvent.VK_F4, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); removeTrack.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -871,7 +871,7 @@ public void actionPerformed(ActionEvent e) saveTrack.setText("Save Track"); saveTrack.setMnemonic('S'); saveTrack.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); saveTrack.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) @@ -888,7 +888,7 @@ public void actionPerformed(ActionEvent event) saveTrackAs.setText("Save Track As..."); saveTrackAs.setMnemonic('A'); saveTrackAs.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx() + java.awt.event.InputEvent.SHIFT_DOWN_MASK)); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() + java.awt.event.InputEvent.SHIFT_DOWN_MASK)); saveTrackAs.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) @@ -904,7 +904,7 @@ public void actionPerformed(ActionEvent event) screenShot.setIcon(null); // Make sure the menu items displays only text. screenShot.setMnemonic('T'); screenShot.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); fileMenu.add(screenShot); //-------- @@ -914,7 +914,7 @@ public void actionPerformed(ActionEvent event) bulkDownload.setText("Bulk download..."); bulkDownload.setMnemonic('B'); bulkDownload.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_B, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); bulkDownload.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) @@ -1004,7 +1004,7 @@ public void actionPerformed(ActionEvent event) metersMenuItem.setText("Meters"); metersMenuItem.setMnemonic('M'); metersMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_M, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); metersMenuItem.setActionCommand(UNIT_METRIC); metersMenuItem.addActionListener(new ActionListener() { @@ -1042,7 +1042,7 @@ public void actionPerformed(ActionEvent e) angleDDMenuItem.setText("Angles DD"); angleDDMenuItem.setMnemonic('D'); angleDDMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); angleDDMenuItem.setActionCommand(Angle.ANGLE_FORMAT_DD); angleDDMenuItem.addActionListener(new ActionListener() { @@ -1086,7 +1086,7 @@ public void actionPerformed(ActionEvent e) newAnnotation.setText("New Annotation..."); newAnnotation.setMnemonic('N'); newAnnotation.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); newAnnotation.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -1101,7 +1101,7 @@ public void actionPerformed(ActionEvent e) removeAnnotation.setText("Remove Annotation"); removeAnnotation.setMnemonic('R'); removeAnnotation.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx() + java.awt.event.InputEvent.SHIFT_DOWN_MASK)); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() + java.awt.event.InputEvent.SHIFT_DOWN_MASK)); removeAnnotation.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) @@ -1157,7 +1157,7 @@ public void itemStateChanged(ItemEvent e) sarHelp.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0)); else sarHelp.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_HELP, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); sarHelp.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) diff --git a/src/gov/nasa/worldwindx/applications/sar/TrackController.java b/src/gov/nasa/worldwindx/applications/sar/TrackController.java index ae4eded386..c0d2715404 100644 --- a/src/gov/nasa/worldwindx/applications/sar/TrackController.java +++ b/src/gov/nasa/worldwindx/applications/sar/TrackController.java @@ -196,7 +196,7 @@ private void createPathTrackRepresentation(SARTrack track) { Path airPath = new Path(track); airPath.setOffset(track.getOffset()); airPath.setPathType(AVKey.RHUMB_LINE); - var attrs = new BasicShapeAttributes(); + BasicShapeAttributes attrs = new BasicShapeAttributes(); attrs.setOutlineMaterial(new Material(track.getColor())); airPath.setAttributes(attrs); diff --git a/src/gov/nasa/worldwindx/applications/sar/ViewMenu.java b/src/gov/nasa/worldwindx/applications/sar/ViewMenu.java index 230aecba01..907a9a4390 100644 --- a/src/gov/nasa/worldwindx/applications/sar/ViewMenu.java +++ b/src/gov/nasa/worldwindx/applications/sar/ViewMenu.java @@ -67,7 +67,7 @@ public void setWwd(WorldWindow wwdInstance) // Terrain profile JMenuItem mi = new JMenuItem("Terrain profile..."); mi.setMnemonic('T'); - mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); mi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) @@ -80,7 +80,7 @@ public void actionPerformed(ActionEvent event) // Cloud ceiling contour mi = new JMenuItem("Cloud Contour..."); mi.setMnemonic('C'); - mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); mi.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) diff --git a/src/gov/nasa/worldwindx/applications/sar/render/PlaneModel.java b/src/gov/nasa/worldwindx/applications/sar/render/PlaneModel.java index 2d9eb42a72..0f537ccb92 100644 --- a/src/gov/nasa/worldwindx/applications/sar/render/PlaneModel.java +++ b/src/gov/nasa/worldwindx/applications/sar/render/PlaneModel.java @@ -163,7 +163,7 @@ private void createRenderables(DrawContext dc) { this.planeModel.setPathType(AVKey.LINEAR); this.planeModel.setFollowTerrain(false); this.planeModel.setNumSubsegments(1); - var attrs = new BasicShapeAttributes(); + BasicShapeAttributes attrs = new BasicShapeAttributes(); attrs.setOutlineMaterial(new Material(this.color)); this.planeModel.setAttributes(attrs); diff --git a/src/gov/nasa/worldwindx/applications/worldwindow/core/SimpleImporter.java b/src/gov/nasa/worldwindx/applications/worldwindow/core/SimpleImporter.java index b99c59f59a..ca35dc2f7a 100644 --- a/src/gov/nasa/worldwindx/applications/worldwindow/core/SimpleImporter.java +++ b/src/gov/nasa/worldwindx/applications/worldwindow/core/SimpleImporter.java @@ -144,7 +144,7 @@ protected boolean isShapfile(Object source) { } protected void openShapefile(Object source) { - var factory = new ShapefileLayerFactory(); + ShapefileLayerFactory factory = new ShapefileLayerFactory(); Layer layer = (Layer) factory.createFromShapefileSource(source); if (layer != null) { layer.setName(formName(source, null)); diff --git a/src/gov/nasa/worldwindx/applications/worldwindow/features/MeasurementPanel.java b/src/gov/nasa/worldwindx/applications/worldwindow/features/MeasurementPanel.java index f5c92840d2..a9119e52e4 100644 --- a/src/gov/nasa/worldwindx/applications/worldwindow/features/MeasurementPanel.java +++ b/src/gov/nasa/worldwindx/applications/worldwindow/features/MeasurementPanel.java @@ -215,7 +215,7 @@ private Renderable makeMeasureShape(String shapeType) { Path line = new Path(); line.setPositions(new ArrayList<>()); line.setSurfacePath(true); - var attrs = new BasicShapeAttributes(); + BasicShapeAttributes attrs = new BasicShapeAttributes(); attrs.setOutlineWidth(shapeType.equals(FREEHAND) ? 2 : 4); line.setAttributes(attrs); return line; diff --git a/src/gov/nasa/worldwindx/examples/AirspaceBuilder.java b/src/gov/nasa/worldwindx/examples/AirspaceBuilder.java index 32dbb83776..c2da1f62cb 100644 --- a/src/gov/nasa/worldwindx/examples/AirspaceBuilder.java +++ b/src/gov/nasa/worldwindx/examples/AirspaceBuilder.java @@ -1323,7 +1323,7 @@ public static void makeMenuBar(JFrame frame, final AirspaceBuilderController con { JMenuItem item = new JMenuItem("Open..."); item.setAccelerator(KeyStroke.getKeyStroke( - KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); item.setActionCommand(OPEN); item.addActionListener(controller); menu.add(item); @@ -1335,7 +1335,7 @@ public static void makeMenuBar(JFrame frame, final AirspaceBuilderController con item = new JMenuItem("Save..."); item.setAccelerator(KeyStroke.getKeyStroke( - KeyEvent.VK_S, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + KeyEvent.VK_S, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); item.setActionCommand(SAVE); item.addActionListener(controller); menu.add(item); @@ -1379,7 +1379,7 @@ public static void makeMenuBar(JFrame frame, final AirspaceBuilderController con { JMenuItem item = new JMenuItem("Deselect"); item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); item.setActionCommand(CLEAR_SELECTION); item.addActionListener(controller); menu.add(item); diff --git a/src/gov/nasa/worldwindx/examples/KeepingObjectsInView.java b/src/gov/nasa/worldwindx/examples/KeepingObjectsInView.java index f6bab33ead..bfabb7095e 100644 --- a/src/gov/nasa/worldwindx/examples/KeepingObjectsInView.java +++ b/src/gov/nasa/worldwindx/examples/KeepingObjectsInView.java @@ -196,7 +196,7 @@ public static Iterable createObjectsToTrack() { randLocation2 = randomLocation(sector); Path path = new Path(Arrays.asList(randLocation1, randLocation2), 0d); path.setSurfacePath(true); - var attrs = new BasicShapeAttributes(); + BasicShapeAttributes attrs = new BasicShapeAttributes(); attrs.setOutlineWidth(3); attrs.setOutlineMaterial(new Material(Color.RED)); path.setAttributes(attrs); diff --git a/src/gov/nasa/worldwindx/examples/LineBackground.java b/src/gov/nasa/worldwindx/examples/LineBackground.java index bc0b070a4d..0459be0337 100644 --- a/src/gov/nasa/worldwindx/examples/LineBackground.java +++ b/src/gov/nasa/worldwindx/examples/LineBackground.java @@ -94,7 +94,7 @@ public AppFrame() { path2.setSurfacePath(true); path2.setPathType(AVKey.RHUMB_LINE); float[] c = backgroundAttrs.getOutlineMaterial().getDiffuse().getColorComponents(new float[3]); - var attrs = new BasicShapeAttributes(backgroundAttrs); + BasicShapeAttributes attrs = new BasicShapeAttributes(backgroundAttrs); attrs.setOutlineMaterial(new Material(new Color(c[0], c[1], c[2], (float) backgroundAttrs.getOutlineOpacity()))); path2.setAttributes(attrs); path2.makeClosed(); diff --git a/src/gov/nasa/worldwindx/examples/SurfaceImages.java b/src/gov/nasa/worldwindx/examples/SurfaceImages.java index 7d6ff88c16..c6057f3717 100644 --- a/src/gov/nasa/worldwindx/examples/SurfaceImages.java +++ b/src/gov/nasa/worldwindx/examples/SurfaceImages.java @@ -75,7 +75,7 @@ public AppFrame() { Path boundary = new Path(si1.getCorners(), 0); boundary.setSurfacePath(true); boundary.setPathType(AVKey.RHUMB_LINE); - var attrs = new BasicShapeAttributes(); + BasicShapeAttributes attrs = new BasicShapeAttributes(); attrs.setOutlineMaterial(new Material(new Color(0, 255, 0))); boundary.setAttributes(attrs); boundary.makeClosed(); diff --git a/src/gov/nasa/worldwindx/examples/WorldWindDiagnostics.java b/src/gov/nasa/worldwindx/examples/WorldWindDiagnostics.java index bafb38e916..3438656c86 100644 --- a/src/gov/nasa/worldwindx/examples/WorldWindDiagnostics.java +++ b/src/gov/nasa/worldwindx/examples/WorldWindDiagnostics.java @@ -134,9 +134,9 @@ public void init(GLAutoDrawable glAutoDrawable) { sb.append("\nJOGL Values\n"); String pkgName = "com.jogamp.opengl"; try { - getClass().getClassLoader().loadClass(pkgName + ".GL"); - - Package p = getClass().getClassLoader().getDefinedPackage(pkgName); + Class clase = getClass().getClassLoader().loadClass(pkgName + ".GL"); + + Package p = clase.getPackage();//getClass().getClassLoader().getDefinedPackage(pkgName); if (p == null) { sb.append("WARNING: Package.getPackage(" + pkgName + ") is null\n"); } else { diff --git a/src/gov/nasa/worldwindx/examples/shapebuilder/ExtrudedPolygonBuilder.java b/src/gov/nasa/worldwindx/examples/shapebuilder/ExtrudedPolygonBuilder.java index 2ff2494b27..218c4669d2 100644 --- a/src/gov/nasa/worldwindx/examples/shapebuilder/ExtrudedPolygonBuilder.java +++ b/src/gov/nasa/worldwindx/examples/shapebuilder/ExtrudedPolygonBuilder.java @@ -942,7 +942,7 @@ public static void makeMenuBar(JFrame frame, final PolygonBuilderController cont { JMenuItem item = new JMenuItem("Deselect"); item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); item.setActionCommand(CLEAR_SELECTION); item.addActionListener(controller); menu.add(item); diff --git a/src/gov/nasa/worldwindx/examples/shapebuilder/RigidShapeBuilder.java b/src/gov/nasa/worldwindx/examples/shapebuilder/RigidShapeBuilder.java index 63b27956f1..8bec948d05 100644 --- a/src/gov/nasa/worldwindx/examples/shapebuilder/RigidShapeBuilder.java +++ b/src/gov/nasa/worldwindx/examples/shapebuilder/RigidShapeBuilder.java @@ -1863,14 +1863,14 @@ public static void makeMenuBar(JFrame frame, final AbstractShapeBuilderControlle { JMenuItem item = new JMenuItem("Open..."); item.setAccelerator(KeyStroke.getKeyStroke( - KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + KeyEvent.VK_O, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); item.setActionCommand(OPEN); item.addActionListener(controller); menu.add(item); item = new JMenuItem("Save..."); item.setAccelerator(KeyStroke.getKeyStroke( - KeyEvent.VK_S, Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + KeyEvent.VK_S, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); item.setActionCommand(SAVE); item.addActionListener(controller); menu.add(item); @@ -1900,7 +1900,7 @@ public void actionPerformed(ActionEvent e) { JMenuItem item = new JMenuItem(mode.getMode()); item.setAccelerator(KeyStroke.getKeyStroke(mode.getShortcut(), - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) @@ -1936,7 +1936,7 @@ public void actionPerformed(ActionEvent e) { JMenuItem item = new JMenuItem("Deselect"); item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, - Toolkit.getDefaultToolkit().getMenuShortcutKeyMaskEx())); + Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); item.setActionCommand(CLEAR_SELECTION); item.addActionListener(controller); menu.add(item); diff --git a/src/overview.html b/src/overview.html index faba690f87..5babc9c1cd 100644 --- a/src/overview.html +++ b/src/overview.html @@ -56,7 +56,7 @@

Data Retrieval

WorldWind works with enormous quantities of data and information, all of which exist primarily on remote data servers. Retrieval and local caching of that data is therefore a primary feature of WorldWind. The classes that implement retrieval are {@link gov.nasa.worldwind.retrieve.Retriever} and {@link - gov.nasa.worldwind.retrieve.RetrievalService}.

+ gov.nasa.worldwind.retrieve.RetrievalService}.

{@link gov.nasa.worldwind.retrieve.Retriever} encapsulates a single network retrieval request. It is an interface. @@ -79,7 +79,7 @@

Data Retrieval

for instance, can convert non-DDS formats to DDS, or simply store the data as-is in the file cache. {@link gov.nasa.worldwind.terrain.BasicElevationModel} just persists the raw data. The post processor runs in the same thread as the retriever, which is neither the event-dispatching (UI) thread nor the rendering thread, but the one - created by the retrieval service for that retriever.

+ created by the retrieval service for that retriever.

Data that has been previously retrieved or is otherwise local (on disk) is brought into memory in a thread separate @@ -97,7 +97,7 @@

Data Retrieval

java.lang.Runnable} to determine in a separate thread where the data must be drawn from, disk or network. If it's on the disk then the task can simply read it and cache it right away. If it's remote then the task creates a Retriever and requests retrieval. Later, after retrieval has placed the data on disk, the situation will be - the local case and data can be loaded into memory within the Runnable.

+ the local case and data can be loaded into memory within the Runnable.

Memory Cache

@@ -156,7 +156,7 @@

Picking and Selection

receives the full list of picked items, with the truly visible ones marked as such.

WorldWind provides utility classes to make it simple for layers to participate in this picking scheme. See {@link - gov.nasa.worldwind.pick.PickSupport}

+ gov.nasa.worldwind.pick.PickSupport}.

Use of Proxies

diff --git a/worldwind-2.4.0.jar b/worldwind-2.4.0.jar new file mode 100644 index 0000000000..8bee44726c Binary files /dev/null and b/worldwind-2.4.0.jar differ diff --git a/worldwindx-2.4.0.jar b/worldwindx-2.4.0.jar new file mode 100644 index 0000000000..6b89805d57 Binary files /dev/null and b/worldwindx-2.4.0.jar differ