Author: sshyrkov
Date: Mon Dec 10 15:00:06 2007
New Revision: 19355

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D19355&repname=
=3Djahia
Log:
VOD-54: delete the language states entries first before update. In rare cas=
es there can be an inconsistency, if the entries are only updated

Modified:
    trunk/core/src/java/org/jahia/hibernate/dao/JahiaLanguagesStatesDAO.java
    trunk/core/src/java/org/jahia/hibernate/manager/JahiaLanguagesStatesMan=
ager.java
    trunk/core/src/java/org/jahia/services/workflow/WorkflowService.java

Modified: trunk/core/src/java/org/jahia/hibernate/dao/JahiaLanguagesStatesD=
AO.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/hibernate/dao/JahiaLanguagesStatesDAO.java&rev=3D19355&repname=3Dj=
ahia
=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
--- trunk/core/src/java/org/jahia/hibernate/dao/JahiaLanguagesStatesDAO.jav=
a (original)
+++ trunk/core/src/java/org/jahia/hibernate/dao/JahiaLanguagesStatesDAO.jav=
a Mon Dec 10 15:00:06 2007
@@ -40,6 +40,13 @@
         }
     }
 =

+    public void saveOrUpdate(JahiaLanguagesStates workflow) {
+        HibernateTemplate hibernateTemplate =3D getHibernateTemplate();
+        hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_AUTO);
+        hibernateTemplate.saveOrUpdate(workflow);
+        hibernateTemplate.flush();
+    }
+
     public void update(JahiaLanguagesStates ls) {
         HibernateTemplate hibernateTemplate =3D getHibernateTemplate();
         hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_AUTO);
@@ -86,11 +93,16 @@
     }
 =

     public void clearEntries(String objectKey) {
-        String hql =3D "from JahiaLanguagesStates l where l.comp_id.object=
key=3D?";
         final HibernateTemplate template =3D getHibernateTemplate();
         template.setCacheQueries(true);
         template.setFlushMode(HibernateTemplate.FLUSH_NEVER);
-        template.deleteAll(template.find(hql, new Object[]{objectKey}));
+        List entries =3D template.find(
+                "from JahiaLanguagesStates l where l.comp_id.objectkey=3D?=
",
+                new Object[] { objectKey });
+
+        final HibernateTemplate deleteTemplate =3D getHibernateTemplate();
+        deleteTemplate.setCacheQueries(false);
+        deleteTemplate.setFlushMode(HibernateTemplate.FLUSH_EAGER);
+        deleteTemplate.deleteAll(entries);
     }
-
 }
\ No newline at end of file

Modified: trunk/core/src/java/org/jahia/hibernate/manager/JahiaLanguagesSta=
tesManager.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/hibernate/manager/JahiaLanguagesStatesManager.java&rev=3D19355&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
--- trunk/core/src/java/org/jahia/hibernate/manager/JahiaLanguagesStatesMan=
ager.java (original)
+++ trunk/core/src/java/org/jahia/hibernate/manager/JahiaLanguagesStatesMan=
ager.java Mon Dec 10 15:00:06 2007
@@ -61,23 +61,40 @@
         dao.clearEntries(objectKey);
     }
 =

-    public void updateLanguagesStates(final String objectKey,
+    public void updateLanguagesState(final String objectKey,
                                       final String languageCode,
                                       final int value,
                                       final int siteID) {
-        synchronized (this) {
-            try {
-                final JahiaLanguagesStates ls =3D dao.findByPK(objectKey, =
languageCode);
-                final Integer workflowState =3D new Integer(value);
-                if (!ls.getWorkflowState().equals(workflowState)) {
-                    ls.setWorkflowState(workflowState);
-                    ls.setSiteID(new Integer(siteID));
-                    dao.update(ls);
-                }
-            } catch (Exception e) {
-                final JahiaLanguagesStates ls =3D new JahiaLanguagesStates(
-                        new JahiaLanguagesStatesPK(objectKey, languageCode=
), new Integer(value), new Integer(siteID));
-                dao.save(ls);
+        try {
+            final Integer workflowState =3D new Integer(value);
+            final JahiaLanguagesStates ls =3D dao.findByPK(objectKey,
+                    languageCode);
+            if (!ls.getWorkflowState().equals(workflowState)) {
+                ls.setWorkflowState(workflowState);
+                ls.setSiteID(new Integer(siteID));
+                dao.update(ls);
+            }
+        } catch (Exception e) {
+            final JahiaLanguagesStates ls =3D new JahiaLanguagesStates(
+                    new JahiaLanguagesStatesPK(objectKey, languageCode),
+                    new Integer(value), new Integer(siteID));
+            dao.save(ls);
+        }
+    }
+
+    public void updateLanguagesStates(final String objectKey,
+            final Map languageStates, final int siteID) {
+        clearEntries(objectKey);
+        if (!languageStates.isEmpty()) {
+            Integer siteIdObj =3D new Integer(siteID);
+            for (Iterator iterator =3D languageStates.entrySet().iterator(=
); iterator
+                    .hasNext();) {
+                Map.Entry entry =3D (Map.Entry) iterator.next();
+                JahiaLanguagesStates ls =3D new JahiaLanguagesStates(
+                        new JahiaLanguagesStatesPK(objectKey, (String) ent=
ry
+                                .getKey()), (Integer) entry.getValue(),
+                        siteIdObj);
+                dao.saveOrUpdate(ls);
             }
         }
     }

Modified: trunk/core/src/java/org/jahia/services/workflow/WorkflowService.j=
ava
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/services/workflow/WorkflowService.java&rev=3D19355&repname=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
--- trunk/core/src/java/org/jahia/services/workflow/WorkflowService.java (o=
riginal)
+++ trunk/core/src/java/org/jahia/services/workflow/WorkflowService.java Mo=
n Dec 10 15:00:06 2007
@@ -801,7 +801,7 @@
             GroupCacheKey mainCacheKey =3D null;
             if (!main.equals(object)) {
                 mainCacheKey =3D new GroupCacheKey(main.toString()+"_"+des=
cendInAllSubGroups+"_"+checkParents, new HashSet());
-                l =3D (List[]) linkedObjectsCache.get(mainCacheKey);
+            l =3D (List[]) linkedObjectsCache.get(mainCacheKey);
             }
             cacheKey.getGroups().add(object.toString());
             cacheKey.getGroups().add(MAINPREFIX + main.toString());
@@ -814,9 +814,9 @@
                 l[1].removeAll(l[0]);
                 linkedObjectsCache.put(cacheKey, l);
                 if (mainCacheKey !=3D null) {
-                    mainCacheKey.getGroups().add(main.toString());
-                    mainCacheKey.getGroups().add(MAINPREFIX + main.toStrin=
g());
-                    linkedObjectsCache.put(mainCacheKey, l);
+                mainCacheKey.getGroups().add(main.toString());
+                mainCacheKey.getGroups().add(MAINPREFIX + main.toString());
+                linkedObjectsCache.put(mainCacheKey, l);
                 }
             }
         }
@@ -1303,16 +1303,12 @@
 =

     public Map storeLanguageState(final ContentObjectKey key, final int si=
teID) throws JahiaException {
         Map m =3D evalLanguagesStates(key);
-        for (Iterator iterator =3D m.keySet().iterator(); iterator.hasNext=
();) {
-            String lang =3D (String) iterator.next();
-            Integer value =3D (Integer) m.get(lang);
-            languagesStatesManager.updateLanguagesStates(key.toString(), l=
ang, value.intValue(), siteID);
-        }
+        languagesStatesManager.updateLanguagesStates(key.toString(), m, si=
teID);
         return m;
     }
 =

     public void storeLanguageState(final ContentObjectKey key, final Strin=
g languageCode, final int value, final int siteID) {
-        languagesStatesManager.updateLanguagesStates(key.toString(), langu=
ageCode, value, siteID);
+        languagesStatesManager.updateLanguagesState(key.toString(), langua=
geCode, value, siteID);
     }
 =

 =


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

Reply via email to