19 Jul 2009

Table widget improvements

Author: reinhardt1053 | Filed under: Blog

Ho riprogettato il sistema di selezione delle TableRow aggiungendo il supporto per la tastiera (VK_DOWN e VK_UP per lo spostamento) e migliorato le performance generali del TableBody (memoria e tempo di risposta).

tableView

Prossime features da aggiungere in ordine di priorità:
1) Ricerca
2) Paginazione
3) Ordinamento

18 Jul 2009

Visualizza stato “Modifica” in Sidebar + Focus

Author: reinhardt1053 | Filed under: Blog

Ho sistemato la sidebar quando si entra nello stato di modifica record. Ho impostato il focus sul primo
“input” di RecordView in fase di aggiunta e modifica record. In quest’ultime ho aggiunto anche un tasto “Annulla”. Con il doppio click sulla Table, in TableView, si accede direttamente alla fase di modifica.

18 Jul 2009

Aggiornamento Record

Author: nibbio | Filed under: Blog

Ho aggiunto la funzione di aggiornamento record per TableForm.

Manca la sincronizzazione della sidebar (vedere commento CVS).

Cià

17 Jul 2009

Eliminazione Record

Author: reinhardt1053 | Filed under: Blog

Ho aggiunto la funzione di eliminazione record in TableView.

15 Jul 2009

Moduli Plug-And-Play

Author: reinhardt1053 | Filed under: Blog

I moduli devono essere copiati nella cartella:

“<encompass-home>/accounts/<account-name>/modules/”

Ogni modulo è contenuto all’interno di una cartella il cui nome ha la seguente forma:

“<module-vendor>.<module-name>”

Encompass, subito dopo la fase di login, provvede al caricamento automatico di tutti i moduli. E’ stato eliminato il file modules.xml usato in precedenza.

Saluti

Massimo Fazzolari

15 Jul 2009

HSQL Swing Manager

Author: reinhardt1053 | Filed under: Blog

<target name="HSQLManager">
<java classname="org.hsqldb.util.DatabaseManagerSwing" fork="true">
<classpath>
<fileset dir="core/lib">
<include name="hsqldb.jar" />
</fileset>
</classpath>
</java>
</target>

Ho aggiunto il task ant per l’esecuzione del tool di amministrazione di hsql. Encompass esegue attualmente HSQL in modalità in-process. Questo impedisce l’esecuzione concorrente del tool di amministrazione e di encompass stesso. Dovremmo valutare la possibilità di usare l’accesso server-mode almeno in fase di sviluppo. Limitando l’uso della modalità in-process solo alla fase di deployment.

Saluti

Massimo Fazzolari

14 Jul 2009

Accounts

Author: reinhardt1053 | Filed under: Blog

encompassLogin

L’utente fornisce email e password per l’accesso ad encompass tramite la gui LoginView. Questa è gestita dal controller AuthenticationController visibile nel diagramma riportato sopra. Ha inizio a questo punto il seguente processo:

1) AuthenticationController richiama il metodo login dell’oggetto Authentication (Singleton) richiedendo l’accesso;

2) Nel caso in cui le credenziali fornite dall’utente sono corrette, il metodo login non solleva alcuna eccezione e AuthenticationController può procedere al passo successivo;

3) AuthenticationController ha portato a termine il suo compito, cede allora il controllo a RootController richiamando su di esso il metodo index e fornendo l’email dell’utente che ha effettuato correttamente l’accesso;

4) RootController prima di visualizzare la Home di encompass procede con la procedura di caricamento di tutti i moduli associati all’account utente. Il caricamento è effettuato dalla classe ModulesManager (Singleton) che fornisce un metodo loadModules.

5) La classe ModelManager supporta il compito della classe ModulesManager occupandosi del caricamento dei model. All’inizio della procedura viene inizializzata;

6) Ogni modulo ha un suo model definito nel file model.xml. La classe ModulesManager richiede il caricamento di ogni model alla classe ModelManager;

7) Tutti i model sono stati caricati. La classe ModelManager mantiene delle strutture dati adeguate contenenti adesso tutte le Table e i TableField caricati dai vari model;

8 ) La procedura di caricamento dei moduli è completata. Il RootController può procedere;

9) Il RootController visualizza la home e la sidebar principale. Il processo di caricamento iniziale è completato.

Saluti

Massimo Fazzolari

28 May 2009

JAXB: Marshalling and Unmarshalling

Author: reinhardt1053 | Filed under: Blog

Per usare ant ho dovuto usare l’implementazione GlassFish visto che la JDK 6.0 non incorpora il compilatore xjc.

Ecco lo script ant:

	<target name="compile-xsd">
		<xjc destdir="src" package="it.encompass">
			<schema dir="xsd" includes="*.xsd" />
			<produces dir="src/it/encompass" includes="**/*.java" />
		</xjc>
	</target>

	<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
	  <classpath>
	    <fileset dir="jaxb_lib" includes="*.jar" />
	  </classpath>
	</taskdef>

Ho realizzato un esempio per testare il marshalling e l’unmarshalling di Jaxb che al momento, salvo il problema sopra menzionato, mi sembra eccellente:

	public static void main(String[] args) {
		try {
			 // create a JAXBContext capable of handling classes generated into "encompass.it"
			JAXBContext jc = JAXBContext.newInstance("it.encompass");

			 // create an Unmarshaller
            Unmarshaller u = jc.createUnmarshaller();

            // unmarshal a CourseBooking
            JAXBElement<CourseBooking> courseBookingElement = (JAXBElement<CourseBooking>)u.unmarshal( new FileInputStream( "xml/course-booking.xml" ) );

            CourseBooking courseBooking = courseBookingElement.getValue();

            //Students
            List<StudentType> studenti = courseBooking.getStudent();
            for (StudentType studente: studenti){
            	System.out.print("First Name: " + studente.getFirstName() + " ");
            	System.out.println("Surname Name: " + studente.getSurname());
            }

            //Company
            CompanyType company = courseBooking.getCompany();
            System.out.println("Company Address: " + company.getAddress());
            company.setAddress("Via Alfieri, 22");

            //Marshalling
            Marshaller marshaller = jc.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            marshaller.marshal(courseBookingElement, new FileOutputStream( "xml/course-booking.xml" ));

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

Saluti
Massimo Fazzolari