Creiamo un blog con Portofino
Con questo articolo incominciamo un serie di cinque tutorial, nei quali vedremo come utilizzare Portofino 4 per creare un blog.
Gli argomenti della serie saranno:
- Utilizzare Portofino 4 per realizzare il modello e le funzionalità di un blog con le funzioni base di Portofino.
- Impostare permessi e cambiare il tema grafico.
- Personalizzare la pagina dei post
- Personalizzare la pagina dei commenti
- Creare feed RSS.
E ora incominciamo a realizzare la prima versione del blog.
Passo 1. Avviamo Portofino 4 e creiamo una connessione al DB
> cd portofino-4.0.8/apache-tomcat-6.0.36/ > bin/startup.sh
- Click su "Administration" (in alto a destra) > "Wizard"
- Step 1. Connect to your database. Crea una connessione JDBC Connection come mostrato nella figura seguente, e infine fai click su "Next >>".
- Step 2. Select the database schema(s) to import. Seleziona lo schema (ad esempio public), e fai click su "Next >>".
- Step 3. Set up user management, Ignora questo passaggio e fai click su "Next >>".
- Step 4. Generate pages. Seleziona "don't generate anything" e fai click su "Next >>".
- Fai click su "Finish"
Passo 2. Creiamo il modello dei dati
- creare la struttura direttamente sul DB al di fuori di Portofino,
- utilizzare Liquibase gestito da Portofino e tenere traccia delle versioni.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
<changeSet id="blog-1" author="Giampiero Granatella">
<createTable tableName="post">
<column name="id" autoIncrement="true" type="int">
<constraints nullable="false" primaryKey="true"/>
</column>
<column name="title" type="varchar(255)">
<constraints nullable="false"/>
</column>
<column name="summary" type="text"></column>
<column name="body" type="text">
<constraints nullable="false"/>
</column>
<column name="author" type="varchar(100)">
<constraints nullable="false"/>
</column>
<column name="date" type="date">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet id="blog-2" author="Giampiero Granatella">
<createTable tableName="comment">
<column name="id" autoIncrement="true" type="int">
<constraints nullable="false" primaryKey="true"/>
</column>
<column name="post" type="int">
<constraints nullable="false"/>
</column>
<column name="comment" type="text">
<constraints nullable="false"/>
</column>
<column name="author" type="varchar(100)">
<constraints nullable="false"/>
</column>
<column name="date" type="date">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
<changeSet id="blog-3" author="Giampiero Granatella">
<addForeignKeyConstraint baseTableName="comment"
baseColumnNames="post"
constraintName="fk_post" referencedTableName="post"
referencedColumnNames="id"/>
</changeSet>
</databaseChangeLog>
Passo 3. Creiamo la pagina per i post
Notiamo che nel campo “Where” abbiamo selezionato “at the top level” per fare apparire la pagina al primo livello della navigazione.
Come si nota dalla seguente figura il campo “id” e il campo “date” non sono né inseribili, né modificabili. Il campo id è gestito con un contatore dal database (vedi la definizione nel file Liquibase), mentre la data verrà generata automaticamente dal sistema alla creazione del post.
protected void createSetup(Object object) {
object.date = new java.util.Date();
}
Passo 4. Creiamo la pagina per i commenti
In questo caso la query HQL filtra tutti i commenti con una clausola where che lega il commento al suo post.
%{#post.id} è un espressione OGNL che prende il campo id dalla variabile “post” salvata nel passo precedente.
Anche nei commenti inseriamo la data in automatico. Sempre nella creazione, gestiamo l'appartenenza di un commento al post . Come abbiamo già visto, realizziamo queste operazione nel metodo createSetup nello script Groovy.
protected void createSetup(Object object) {
object.date = new java.util.Date();
//Prendiamo l'id dalla variabile post
object.post = ognlContext.post.id;
}
E con questo abbiamo raggiunto il risultato finale del nostro primo tutorial.Nel prossimo tutorial inizieremo a vedere il funzionamento dei permessi e come cambiare la veste grafica.

