Developing Arena

Arena is currently being developed in Scala Language. Here a list of requirements in order to setup a working environment to start working in Arena development (note that these are not instructions to "use" Arena, but to extend it of change it)

Requirements

  • Java Development Kit 1.8
  • Scala 2.11 (2.11.8 is fine)

Note: We are currently working on it, but we still don't have a C.I. in order to deploy new versions of artifacts every time someone pushes a change to master. So, this means that, every time you push something, you'll also need to manually deploy it following this instructions (sorry, they are in spanish)

Checkout Projects/Repos

It's useful to create a folder to hold all the repos (projects), but well, optional:

mkdir arena
cd arena

The main repository is here

Main Arena Projects

  • arena-core: contains all the components and Arena API for arena users. It was designed to have as many implementations as you want (SWT + JFaces, AWT, Swing, JavaFx, etc). Currently we have just one implementation: arena-jface.
  • arena-jface: Implementation of Arena on top of SWT, JFace, and JFace Databindings.
  • arena-examples: Contains some examples small apps for internal manual testing.

In order to check them out:

git clone https://github.com/uqbar-project/arena

Additional Utilities

  • uqbar-domain: Utility to model domains. Allows to annotate objects as @Observables. Also contains some API for persistence without coupling it to any implementation.
  • arena-xtend: Extensions to use arena with xtend. Provides kind of an internal DSL for building bindings easily and in a declarative way. Xtend 2.11+ is required (tested with Xtend 2.12)

Check-out:

git clone https://github.com/uqbar-project/uqbar-domain

arena-xtend is in Arena repository.

Components for Observability / Transactional Aspects (not needed unless you'll change this foundations)

If you'll work on the transactional or observability aspects behind Arena, you must download the following projects:

  • apo-apo (Aspects for Pure Objects): Small AOP framework on top of Javassist. It creates a more abstract general layer on top of javassist in order to express all AOP concepts: pointcuts, join-points, aspects, etc.
  • apo-poo (Pure Observable Objects): implements transparent objects observability over AOP. Based on apo-core.
  • apo-pot (Pure Objects Transactions): Implements a transparent transactions mechanism for objects through AOP. (Transactional objects).
  • apo-parent: Additional configuration for apo-core, apo-poo, apo-pot

Parent projects

In addition you can checkout some parent projects if you need to change them:

git clone https://github.com/uqbar-project/uqbar-parent-project
git clone https://github.com/uqbar-project/uqbar-scala-parent

IDE

As we use maven, you can use whatever IDE you want. Although, we can suggest some proven environment:

  • Eclipse Neon with ScalaIDE
  • IntelliJIDEA with Scala plugin

The proven environment is based on Eclipse Neon version. Here's a sample environment

Based on Eclipse

This site

This site was built with Maven APT (Almost plain text) technology. Page sources are located in Arena Core site folder, then you must follow its format.

You can download APT plugin for Eclipse here.

After adding, changing or removing pages, you can test them locally by doing

mvn site:site

Site is generated according to Maven site plugin, and you can browse html files in arena-core project, file: target/site/index.html

When all changes are ready, you can publish the local site with

mvn site:deploy

Maven configuration

You need to configure your maven settings in order to connect to Uqbar's repositories, both to retrieve artifacts, but also to deploy new versions:

File ~/.m2/settings.xml (if .m2 folder is not already created, then create it)

#!xml

 <settings 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/xsd/settings-1.0.0.xsd">

   <servers>
        <server>
            <id>uqbar-releases</id>
            <username>mvn@uqbar-wiki.org</username>
            <password>PASSWORD_HERE</password>
        </server>
        <server>
            <id>uqbar-snapshots</id>
            <username>mvn@uqbar-wiki.org</username>
            <password>repomaven88</password>
        </server>
        <server>
            <id>sites-uqbar-project.org</id>
            <username>sites@uqbar-wiki.org</username>
            <password>PASSWORD_HERE</password>
        </server>
    </servers>
   <profiles>
     <profile>
       <id>uqbar-wiki</id>
       <repositories>
         <repository>
           <id>uqbar-wiki.org-releases</id>
           <name>uqbar-wiki.org-releases</name>
           <url>http://uqbar-wiki.org/mvn/releases</url>
         </repository>
         <repository>
           <snapshots/>
           <id>uqbar-wiki.org-snapshots</id>
           <name>uqbar-wiki.org-snapshots</name>
           <url>http://uqbar-wiki.org/mvn/snapshots</url>
         </repository>
       </repositories>
     </profile>
   </profiles>
   <activeProfiles>
     <activeProfile>uqbar-wiki</activeProfile>
   </activeProfiles>
 </settings>

NOTE THAT YOU MUST ASK SOME UQBAR MEMBER FOR THE PASSWORD AND REPLACE THERE THE "PASSWORD_HERE"