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).

Prossime features da aggiungere in ordine di priorità:
1) Ricerca
2) Paginazione
3) Ordinamento
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.
Author: nibbio | Filed under: Blog
Ho aggiunto la funzione di aggiornamento record per TableForm.
Manca la sincronizzazione della sidebar (vedere commento CVS).
Cià
Author: reinhardt1053 | Filed under: Blog
Ho aggiunto la funzione di eliminazione record in TableView.
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
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
Author: reinhardt1053 | Filed under: Blog

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
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