Showing posts with label Worldclock. Show all posts
Showing posts with label Worldclock. Show all posts

Sunday, 21 April 2013

Worldclock 0.7, Worldclock Saver 0.8, Worldclock editor 1.0

Changes:
  • Built with Maven
  • Source and runtime upped to Java 7
  • Packaged as both zip archives and Windows setup program
  • First attempt at visually repositioning a city if it goes out of view
Download from http://worldclock-application.java.net/

Sunday, 25 November 2012

Worldclock on Jigsaw and HK2

In the previous post I 'ported' HK2 to work on Jigsaw, in this post I adapt Worldclock to use it.

Retrieving the existing code:

svn checkout https://svn.java.net/svn/worldclock-application~svn/tags/application6-jigsaw-maven ~/dev/worldclock-hk2

And the new pom and module-info:

svn checkout https://svn.kenai.com/svn/lh-playground~svn/jigsaw/worldclock-hk2 ~/dev/worldclock-hk2-downloads

Panel

Overwrite the existing pom and module info for the panel:
cp ~/dev/worldclock-hk2-downloads/panel/pom.xml ~/dev/worldclock-hk2/panel/
(update the libraryDirectory path for your set up / username, gedit  ~/dev/worldclock-hk2/panel/pom.xml & )
cp  ~/dev/worldclock-hk2-downloads/panel/src/main/java/lh.worldclock.panel/module-info.java ~/dev/worldclock-hk2/panel/src/main/java/lh.worldclock.panel/
Add the sample HK2 dependency injection contract:
mkdir -p ~/dev/worldclock-hk2/panel/src/main/java/lh.worldclock.panel/lh/worldclock/hk2/
gedit ~/dev/worldclock-hk2/panel/src/main/java/lh.worldclock.panel/lh/worldclock/hk2/PanelProvider.java &
then add the content
package lh.worldclock.hk2;

import lh.worldclock.core.WorldClockBoard;
import org.jvnet.hk2.annotations.Contract;

@Contract
public interface PanelProvider
{
  WorldClockBoard getPanel();
}

Add the sample HK2 dependency injection service:
gedit ~/dev/worldclock-hk2/panel/src/main/java/lh.worldclock.panel/lh/worldclock/hk2/PanelProviderImpl.java &
then add the content
package lh.worldclock.hk2;

import lh.worldclock.core.WorldClockBoard;
import org.jvnet.hk2.annotations.Service;

@Service
public class PanelProviderImpl implements PanelProvider
{
  @Override
  public WorldClockBoard getPanel()
  {
    return new WorldClockBoard();
  }
}
build
cd ~/dev/worldclock-hk2/panel/
mvn -Dmaven.test.skip=true clean install
(if the build fail due to  invalid characters, edit the file and remove the comments
gedit ~/dev/worldclock-hk2/panel/src/main/java/lh.worldclock.panel/lh/worldclock/core/WorldClockBoard.java & )


Application


Overwrite the existing pom and module info for the application:
cp ~/dev/worldclock-hk2-downloads/application/pom.xml ~/dev/worldclock-hk2/application/
(update the libraryDirectory path for your set up / username, gedit  ~/dev/worldclock-hk2/application/pom.xml & )
cp  ~/dev/worldclock-hk2-downloads/application/src/main/java/lh.worldclock.application/module-info.java ~/dev/worldclock-hk2/application/src/main/java/lh.worlclock.application/

Adjust WorldClockPanel:
gedit ~/dev/worldclock-hk2/application/src/main/java/lh.worlclock.application/lh/worldclock/WorldClockPanel.java &

replace constructor start with:
   public WorldClockPanel(final WorldClockBoard board)
  {
//    board = new WorldClockBoard();
    this.board = board;
Adjust WorldClockFrame:
gedit ~/dev/worldclock-hk2/application/src/main/java/lh.worlclock.application/lh/worldclock/WorldClockFrame.java &

add import
 import lh.worldclock.core.WorldClockBoard;

remove the initialisation of pane
 WorldClockPanel pane;

replace constructor start with:
   public WorldClockFrame(ImageIcon icon, final WorldClockBoard board)
  {
    pane = new WorldClockPanel(board);
Adjust WorldClock
gedit ~/dev/worldclock-hk2/application/src/main/java/lh.worlclock.application/lh/worldclock/WorldClock.java &

add imports
import com.sun.enterprise.module.bootstrap.ModuleStartup;
import com.sun.enterprise.module.bootstrap.StartupContext;
import org.jvnet.hk2.annotations.Inject;
import org.jvnet.hk2.annotations.Service;
import lh.worldclock.core.WorldClockBoard;

replace class declaration
    @Service
    public class WorldClock implements ModuleStartup

make the frame non static
/*static*/ WorldClockFrame frame = null;
 add the injection
   @Inject
  WorldClockBoard board;
make main method non static

make void showWindow() non static and change
frame = new WorldClockFrame(icon, board);

to add the board

make   private PopupMenu createPopup() non static

add the following new methods
  public void setStartupContext(StartupContext context)
  {
  }

  public void start()

  {
    main(new String[]{});
  }

  public void stop()
  {
  }
build
cd ~/dev/worldclock-hk2/application/
mvn -Dmaven.test.skip=true clean install

Time to run:
cd ~/dev/hk2-jigsaw/jigsaw-adapter/
mvn lh.jigsaw:jigsaw-maven-plugin:run

Wednesday, 18 January 2012

Jigsaw: Worldclock with the Maven plugin

Last updated: 2012-02-02

In the previous post I created a Maven plugin for Jigsaw, now I'll adapt Worldclock to use it.
The transformed source code is also available at: https://svn.java.net/svn/worldclock-application~svn/tags/application6-jigsaw-maven 


1. Create the directory
mkdir -p ~/dev/worldclock
2. Get the source
cd ~/dev/worldclock
svn checkout https://svn.java.net/svn/worldclock-application~svn/tags/application6-jigsaw ~/dev/worldclock/application

3. Cleanup
Remove the files that are not needed.
rm -rf ~/dev/worldclock/application/*.*
rm -rf ~/dev/worldclock/application/src/META-INF

4. Code adjustment
The current combinaison of Jigsaw/JDK8/Ubuntu does not support the sytem tray properly, so adjust the Worldclock.java to bypass it
gedit ~/dev/worldclock/application/src/lh/worldclock/WorldClock.java &

on line 106 replace:
if (SystemTray.isSupported())
with:
if (false)

on line 135 replace:
if (showWindowOnStart)
with:
if (true)

5. Move the source
Move the files to create the java sources for the application:
mkdir -p ~/dev/worldclock/application/src/main/java/lh.worlclock.application/lh/worldclock
mv ~/dev/worldclock/application/src/lh/worldclock/*.java ~/dev/worldclock/application/src/main/java/lh.worlclock.application/lh/worldclock
Move the application resources:
mkdir -p ~/dev/worldclock/application/src/main/resources/lh/worldclock
mv ~/dev/worldclock/application/src/lh/worldclock/*.* ~/dev/worldclock/application/src/main/resources/lh/worldclock
Move the panel source:
mkdir -p ~/dev/worldclock/panel/src/main/java/lh.worldclock.panel/lh/worldclock/core
mv ~/dev/worldclock/application/src/lh/worldclock/core/*.java ~/dev/worldclock/panel/src/main/java/lh.worldclock.panel/lh/worldclock/core
Move the panel resources:
mkdir -p ~/dev/worldclock/panel/src/main/resources/lh/worldclock/core
mv ~/dev/worldclock/application/src/lh/worldclock/core/*.jpg ~/dev/worldclock/panel/src/main/resources/lh/worldclock/core
More cleanup:
rm -rf ~/dev/worldclock/application/src/lh/worldclock/core
6. Add module-info for Panel
gedit  ~/dev/worldclock/panel/src/main/java/lh.worldclock.panel/module-info.java &

module lh.worldclock.panel @ 0.7
{
  requires jdk.base;
  requires jdk.desktop;
  exports lh.worldclock.core.*;
}

7. Add module-info for Application
gedit ~/dev/worldclock/application/src/main/java/lh.worlclock.application/module-info.java &

module lh.worldclock.application @ 0.7
{
  requires jdk.base;
  requires jdk.desktop;
  requires lh.worldclock.panel @ 0.7;
  class lh.worldclock.WorldClock;
}

8. Add the pom for Panel
gedit ~/dev/worldclock/panel/pom.xml &

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>lh.worldclock</groupId>
  <artifactId>panel</artifactId>
  <packaging>jmod</packaging>
  <version>0.7-SNAPSHOT</version>
  <name>Worldclock Panel</name>
  <url>http://worldclock-application.java.net/</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>lh.jigsaw</groupId>
                <artifactId>jigsaw-maven-plugin</artifactId>
                <version>0.1-SNAPSHOT</version>
                <extensions>true</extensions>
                <configuration>
                  <libraryDirectory>../modules</libraryDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

9. Add the pom for Application
gedit ~/dev/worldclock/application/pom.xml &

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>lh.worldclock</groupId>
  <artifactId>application</artifactId>
  <packaging>jmod</packaging>
  <version>0.7-SNAPSHOT</version>
  <name>Worldclock Application</name>
  <url>http://worldclock-application.java.net/</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
   <build>
        <plugins>
            <plugin>
                <groupId>lh.jigsaw</groupId>
                <artifactId>jigsaw-maven-plugin</artifactId>
                <version>0.1-SNAPSHOT</version>
                <extensions>true</extensions>
                <configuration>
                  <libraryDirectory>../modules</libraryDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

10. Install Panel
cd ~/dev/worldclock/panel/
mvn install

11. Install Application
cd ~/dev/worldclock/application/
mvn install

12. Run
 cd ~/dev/worldclock/application/
mvn lh.jigsaw:jigsaw-maven-plugin:run
(use ctrl+c on the console to exit)



Monday, 30 August 2010

Jigsaw: WorldClock with Maven

In the previous post I built WorldClock using just the command line, this time I'll use Maven for compiling.

1. Get Maven
sudo apt-get install maven2
Set JAVA_HOME to Jigsaw, so that Maven uses Jigsaw:
export JAVA_HOME=~/dev/jigsaw/build/linux-i586/jdk-module-image


2. Adjusting the paths for Maven
Create new directories:
mkdir -p ~/dev/worldclock/panel/src/main/java

mkdir -p ~/dev/worldclock/application/src/main/java

Move the files:
mv /home/ludovic/dev/worldclock/panel/src/lh.worldclock.panel ~/dev/worldclock/panel/src/main/java
mv /home/ludovic/dev/worldclock/panel/resources ~/dev/worldclock/panel/src/main/

mv /home/ludovic/dev/worldclock/application/src/lh.worldclock.panel ~/dev/worldclock/application/src/main/java
mv /home/ludovic/dev/worldclock/application/resources ~/dev/worldclock/application/src/main/

3. Add the poms



Panel ( gedit ~/dev/worldclock/panel/pom.xml & ):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>lh.worldclock</groupId>
  <artifactId>panel</artifactId>
  <packaging>jar</packaging>
  <version>0.7-SNAPSHOT</version>
  <name>Worldclock Panel</name>
  <url>https://worldclock-application.dev.java.net/</url>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
Application ( gedit ~/dev/worldclock/application/pom.xml & ):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>lh.worldclock</groupId>
  <artifactId>application</artifactId>
  <packaging>jar</packaging>
  <version>0.7-SNAPSHOT</version>
  <name>Worldclock Application</name>
  <url>https://worldclock-application.dev.java.net/</url>
  <dependencies>
    <dependency>
      <groupId>lh.worldclock</groupId>
      <artifactId>panel</artifactId>
      <version>0.7-SNAPSHOT</version>
    </dependency>
  </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <compilerArguments>
                        <version />
                        <L>../modules</L>
                    </compilerArguments>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
(somehow using <compilerArgument> -L ../modules</compilerArgument> does not work)

4. Recreate the library
rm -rf ~/dev/worldclock/modules
$JIG/bin/jmod create -L ~/dev/worldclock/modules
 5. Compile and add to the library
Panel:
cd ~/dev/worldclock/panel

mvn install

$JIG/bin/jmod -L ~/dev/worldclock/modules install ~/dev/worldclock/panel/build -r ~/dev/worldclock/panel/src/main/resources lh.worldclock.panel
Application:
cd ~/dev/worldclock/application

mvn install

$JIG/bin/jmod -L ~/dev/worldclock/modules install ~/dev/worldclock/application/build -r ~/dev/worldclock/application/resources lh.worldclock.application
6. Run
$JIG/bin/java -L ~/dev/worldclock/modules -m lh.worldclock.application

Sunday, 2 May 2010

Jigsaw: From Hello World to WorldClock

(last updated 2010-06-20)

Moving on from Hello World to WorldClock, a simple multimodules application.

1. Get the source
Install Subversion:
sudo apt-get install subversion
Create the directories:
mkdir -p ~/dev/worldclock
 Get the source:
cd ~/dev/worldclock
svn checkout https://worldclock-application.dev.java.net/svn/worldclock-application/tags/application6-jigsaw ~/dev/worldclock/application --username guest
When prompted for guest password just press enter, Gnome keyring application then pops up, just cancel and say yes to store the password unencrypted.

2. Move the source files arround
Create the additional directories:
mkdir -p ~/dev/worldclock/application/attic
mkdir -p ~/dev/worldclock/application/build
mkdir -p ~/dev/worldclock/application/resources/lh/worldclock
mkdir -p ~/dev/worldclock/application/src/lh.worldclock.application

mkdir -p ~/dev/worldclock/panel/build
mkdir -p ~/dev/worldclock/panel/resources/lh/worldclock/core
mkdir -p ~/dev/worldclock/panel/src/lh.worldclock.panel/lh/worldclock
(attic is only used to store existing files that won't be needed)

Then move the files:
mv ~/dev/worldclock/application/*.* ~/dev/worldclock/application/attic
mv ~/dev/worldclock/application/src/META-INF ~/dev/worldclock/application/attic

mv ~/dev/worldclock/application/src/lh ~/dev/worldclock/application/src/lh.worldclock.application

mv ~/dev/worldclock/application/src/lh.worldclock.application/lh/worldclock/core ~/dev/worldclock/panel/src/lh.worldclock.panel/lh/worldclock

mv ~/dev/worldclock/application/src/lh.worldclock.application/lh/worldclock/*.properties ~/dev/worldclock/application/resources/lh/worldclock
mv ~/dev/worldclock/application/src/lh.worldclock.application/lh/worldclock/*.png ~/dev/worldclock/application/resources/lh/worldclock

mv ~/dev/worldclock/panel/src/lh.worldclock.panel/lh/worldclock/core/*.jpg ~/dev/worldclock/panel/resources/lh/worldclock/core
The tree should look like this:
So we now have 2 subprojects: application and panel
Each composed of 3 areas: build, src and resources

3. Add the Jigsaw layer
The first part is already there, the first level of subdirectories in the src directories represents the modules roots.

Next add the module-info file for lh.worldclock.panel:
( gedit ~/dev/worldclock/panel/src/lh.worldclock.panel/module-info.java & )
module lh.worldclock.panel @ 0.7
{
  requires jdk.desktop;
}
And the module-info file for lh.worldclock.application:
( gedit ~/dev/worldclock/application/src/lh.worldclock.application/module-info.java & )
module lh.worldclock.application @ 0.7
{
  requires jdk.desktop;
  requires lh.worldclock.panel @ 0.7;
  class lh.worldclock.WorldClock;
}
4. Create the library
$JIG/bin/jmod create -L ~/dev/worldclock/modules
 5. Compile and add to the library
Panel:
cd ~/dev/worldclock/panel

$JIG/bin/javac -encoding UTF-8 -source 7 -d build src/lh.worldclock.panel/module-info.java src/lh.worldclock.panel/lh/worldclock/core/WorldClockBoard.java

$JIG/bin/jmod -L ~/dev/worldclock/modules install ~/dev/worldclock/panel/build -r ~/dev/worldclock/panel/resources lh.worldclock.panel
Application:
cd ~/dev/worldclock/application

$JIG/bin/javac -L ../modules -source 7 -d build src/lh.worldclock.application/module-info.java src/lh.worldclock.application/lh/*/*.java

$JIG/bin/jmod -L ~/dev/worldclock/modules install ~/dev/worldclock/application/build -r ~/dev/worldclock/application/resources lh.worldclock.application
6. Run
$JIG/bin/java -L ~/dev/worldclock/modules -m lh.worldclock.application

Sunday, 11 January 2009

Worldclock 0.3 widget for WidgetFX 1.0

After a few issues upgrading to JavaFX 1.0 / WidgetFX 1.0 (the SwingComponent.wrap() does not quite do exactly the same thing as the old Component.fromJComponent(), at least for me the resize does not work exactly the same), I've released version 0.3 of the Worldclock widget.
Also in this release the possibility to enforce the aspect ratio of the world image(s).

Web page: https://worldclock-application.dev.java.net/#Widget
Direct launch: http://widgetfx.org/dock/launch.jnlp?arg=https://worldclock-application.dev.java.net/widget-webstart/launch.jnlp

Enjoy,