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