Author: sshyrkov
Date: Mon Oct  1 14:09:41 2007
New Revision: 18710

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18710&repname=
=3Djahia
Log:
MAN-24: workflow seems not work
http://www.jahia.net/jira/browse/MAN-24
Resolution: handle inconsistencies properly. If the entry with the the same=
 version already exists in the jahia_fields_data table --> update it, other=
wise --> insert a new one

Modified:
    branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/fields/ContentFie=
ldDB.java

Modified: branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/fields/Cont=
entFieldDB.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-4-1-BR=
ANCH/src/java/org/jahia/services/fields/ContentFieldDB.java&rev=3D18710&rep=
name=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/fields/ContentFie=
ldDB.java (original)
+++ branches/JAHIA-4-1-BRANCH/src/java/org/jahia/services/fields/ContentFie=
ldDB.java Mon Oct  1 14:09:41 2007
@@ -700,7 +700,8 @@
 =

         Connection dbConn =3D null;
         PreparedStatement stmt =3D null;
-        Statement insertStmt =3D null;        =

+        PreparedStatement checkExistStmt =3D null;
+        PreparedStatement updateStmt =3D null;        =

         ResultSet rs =3D null;
 =

         ContentObjectEntryState result =3D null;
@@ -708,14 +709,12 @@
         int fieldID =3D theField.getID ();
 =

         try {
-            StringBuffer buffer =3D new StringBuffer("SELECT * FROM jahia_=
fields_data WHERE ");
-            buffer.append("id_jahia_fields_data =3D ?");
-            buffer.append(" AND workflow_state=3D?");
-            buffer.append(" AND version_id=3D?");
-            buffer.append(" AND language_code=3D?");
-
-            dbConn =3D org.jahia.services.database.ConnectionDispenser.get=
Connection ();
-            stmt =3D dbConn.prepareStatement (buffer.toString());
+            dbConn =3D ConnectionDispenser.getConnection ();
+            final String selectQuery =3D "SELECT * FROM jahia_fields_data =
WHERE "
+                + "id_jahia_fields_data =3D ?"
+                + " AND workflow_state=3D?" + " AND version_id=3D?"
+                + " AND language_code=3D?"; =

+            stmt =3D dbConn.prepareStatement(selectQuery);
             stmt.setInt(1, fieldID);
             stmt.setInt(2, entryState.getWorkflowState ());            =

             stmt.setInt(3, entryState.getVersionID ());
@@ -723,40 +722,47 @@
             rs =3D stmt.executeQuery ();
             if (rs !=3D null)
                 if (rs.next ()) {
-                    insertStmt =3D dbConn.createStatement ();             =
     =

                     // add the version to the list of versioning info in t=
he field
                     int versionID =3D rs.getInt ("version_id");
                     String languageCode =3D rs.getString ("language_code");
                     result =3D new ContentObjectEntryState (0, versionID, =
languageCode);
 =

-                    buffer =3D new StringBuffer ("INSERT INTO jahia_fields=
_data (id_jahia_fields_data,jahiaid_jahia_fields_data,pageid_jahia_fields_d=
ata,ctnid_jahia_fields_data,fielddefid_jahia_fields_data,type_jahia_fields_=
data,connecttype_jahia_fields_data,value_jahia_fields_data,rank_jahia_field=
s_data,rights_jahia_fields_data,version_id,workflow_state,language_code) VA=
LUES (");
-                    buffer.append(fieldID);
-                    buffer.append(                    ",");
-                    buffer.append(rs.getInt ("jahiaid_jahia_fields_data"));
-                    buffer.append(",");
-                    buffer.append(rs.getInt ("pageid_jahia_fields_data"));
-                    buffer.append(",");
-                    buffer.append(rs.getInt ("ctnid_jahia_fields_data"));
-                    buffer.append(",");
-                    buffer.append(rs.getInt ("fielddefid_jahia_fields_data=
"));
-                    buffer.append(",");
-                    buffer.append(rs.getInt ("type_jahia_fields_data"));
-                    buffer.append(",");
-                    buffer.append(rs.getInt ("connecttype_jahia_fields_dat=
a"));
-                    buffer.append(",");
-                    buffer.append("'" + JahiaTools.quote (rs.getString ("v=
alue_jahia_fields_data")));
-                    buffer.append("',");
-                    buffer.append(rs.getInt ("rank_jahia_fields_data"));
-                    buffer.append(",");
-                    buffer.append(rs.getInt ("rights_jahia_fields_data"));
-                    buffer.append(",");
-                    buffer.append(versionID);
-                    buffer.append(",");
-                    buffer.append("0, ");
-                    buffer.append("'");
-                    buffer.append(languageCode);
-                    buffer.append("')");
-                    insertStmt.execute (buffer.toString());
+                    // check for existence
+                    checkExistStmt =3D dbConn.prepareStatement(selectQuery=
);
+                    checkExistStmt.setInt(1, fieldID);
+                    checkExistStmt.setInt(2, 0);            =

+                    checkExistStmt.setInt(3, entryState.getVersionID ());
+                    checkExistStmt.setString(4, entryState.getLanguageCode=
 ());
+                    boolean doUpdate =3D checkExistStmt.executeQuery().nex=
t();
+                    if (doUpdate) {
+                        // there is already a versioned entry with the sam=
e version id --> perform update
+                        updateStmt =3D dbConn
+                                .prepareStatement("update jahia_fields_dat=
a"+ =

+" set id_jahia_fields_data =3D ?, jahiaid_jahia_fields_data =3D ?, pageid_=
jahia_fields_data =3D ?, ctnid_jahia_fields_data =3D ?,"+" fielddefid_jahia=
_fields_data =3D ?, type_jahia_fields_data =3D ?, connecttype_jahia_fields_=
data =3D ?, value_jahia_fields_data =3D ?, rank_jahia_fields_data =3D ?, ri=
ghts_jahia_fields_data =3D ?, version_id =3D ?, workflow_state =3D 0, langu=
age_code =3D ?"+ =

+" where id_jahia_fields_data =3D ? and version_id =3D ? and workflow_state=
 =3D 0 and language_code =3D ?");
+                        updateStmt.setInt(13, fieldID);
+                        updateStmt.setInt(14, versionID);
+                        updateStmt.setString(15, languageCode);
+                    } else {
+                        // no versioned entry --> perform insert
+                        updateStmt =3D dbConn
+                                .prepareStatement("insert into jahia_field=
s_data (id_jahia_fields_data, jahiaid_jahia_fields_data, pageid_jahia_field=
s_data, ctnid_jahia_fields_data, fielddefid_jahia_fields_data, type_jahia_f=
ields_data, connecttype_jahia_fields_data, value_jahia_fields_data, rank_ja=
hia_fields_data, rights_jahia_fields_data, version_id, workflow_state, lang=
uage_code)"
+                                        + " values (?, ?, ?, ?, ?, ?, ?, ?=
, ?, ?, ?, 0, ?)");
+                    }
+                    updateStmt.setInt(1, fieldID);
+                    updateStmt.setInt(2, rs.getInt("jahiaid_jahia_fields_d=
ata"));
+                    updateStmt.setInt(3, rs.getInt("pageid_jahia_fields_da=
ta"));
+                    updateStmt.setInt(4, rs.getInt("ctnid_jahia_fields_dat=
a"));
+                    updateStmt.setInt(5, rs.getInt("fielddefid_jahia_field=
s_data"));
+                    updateStmt.setInt(6, rs.getInt("type_jahia_fields_data=
"));
+                    updateStmt.setInt(7, rs.getInt ("connecttype_jahia_fie=
lds_data"));
+                    updateStmt.setString(8, rs.getString("value_jahia_fiel=
ds_data"));
+                    updateStmt.setInt(9, rs.getInt("rank_jahia_fields_data=
"));
+                    updateStmt.setInt(10, rs.getInt ("rights_jahia_fields_=
data"));
+                    updateStmt.setInt(11, versionID);
+                    updateStmt.setString(12, languageCode);
+                    =

+                    updateStmt.executeUpdate();
                 }
         } catch (SQLException se) {
             throw new JahiaException ("Cannot backup field in the database=
",
@@ -764,7 +770,8 @@
                     JahiaException.ERROR_SEVERITY, se);
         } finally {
             closeStatement(stmt);
-            closeStatement(insertStmt);            =

+            closeStatement(checkExistStmt);
+            closeStatement(updateStmt);            =

         }
         if (result =3D=3D null) {
             logger.debug ("The entry wasn't found in DB and therefore wasn=
't backuped");

_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to