Author: tdraier
Date: Mon Jun 25 15:34:07 2007
New Revision: 17760

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D17760&repname=
=3Djahia
Log:
dont look for links that does not exist ( backport 17566 17567 )

Modified:
    trunk/core/src/java/org/jahia/hibernate/dao/JahiaLinkDAO.java
    trunk/core/src/java/org/jahia/hibernate/manager/JahiaLinkManager.java

Modified: trunk/core/src/java/org/jahia/hibernate/dao/JahiaLinkDAO.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/hibernate/dao/JahiaLinkDAO.java&rev=3D17760&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/hibernate/dao/JahiaLinkDAO.java (original)
+++ trunk/core/src/java/org/jahia/hibernate/dao/JahiaLinkDAO.java Mon Jun 2=
5 15:34:07 2007
@@ -88,6 +88,14 @@
                 new Object[]{rightKey, leftKey, type});
     }
 =

+    public Integer countType(String type) {
+        HibernateTemplate hibernateTemplate =3D getHibernateTemplate();
+        hibernateTemplate.setCacheQueries(true);
+        hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_NEVER);
+        List l =3D hibernateTemplate.find("select count(l) from JahiaLink =
l where l.type=3D?", new Object[]{type});
+        return ((Integer)l.get(0));
+    }
+
     public List findByTypeAndLeftObjectKey(String leftKey, String type) {
         HibernateTemplate hibernateTemplate =3D getHibernateTemplate();
         hibernateTemplate.setCacheQueries(true);

Modified: trunk/core/src/java/org/jahia/hibernate/manager/JahiaLinkManager.=
java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/trunk/core/src/java/o=
rg/jahia/hibernate/manager/JahiaLinkManager.java&rev=3D17760&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/hibernate/manager/JahiaLinkManager.java (=
original)
+++ trunk/core/src/java/org/jahia/hibernate/manager/JahiaLinkManager.java M=
on Jun 25 15:34:07 2007
@@ -35,6 +35,8 @@
 =

 import java.util.List;
 import java.util.HashMap;
+import java.util.Collections;
+import java.util.ArrayList;
 =

 /**
  * Created by IntelliJ IDEA.
@@ -55,6 +57,8 @@
     private CacheService cacheService =3D null;
 // --------------------- GETTER / SETTER METHODS ---------------------
 =

+    private List emptyList =3D Collections.unmodifiableList(new ArrayList(=
));
+
     public void setCacheService(CacheService cacheService) {
         this.cacheService =3D cacheService;
     }
@@ -71,6 +75,7 @@
             dao.save(jahiaLink);
             link.setID(jahiaLink.getId().intValue());
             flushCache(link.getLeftObjectKey().toString(), link.getRightOb=
jectKey().toString());
+            createType(link.getType());
         }
     }
 =

@@ -163,6 +168,9 @@
     }
 =

     public List findByTypeAndLeftAndLikeRightObjectKeys(String type, Objec=
tKey leftObjectKey, String rightObjectKey) {
+        if (!typeExists(type)) {
+            return emptyList;
+        }
         List objectLinks =3D null;
 =

         if (objectLinks =3D=3D null) {
@@ -179,6 +187,9 @@
     }    =

 =

     public List findByTypeAndLeftAndRightObjectKeys(String type, ObjectKey=
 leftObjectKey, ObjectKey rightObjectKey) {
+        if (!typeExists(type)) {
+            return emptyList;
+        }
         List objectLinks =3D null;
         Cache cache =3D cacheService.getCache(CACHE_NAME+"findByTypeAndLef=
tAndRightObjectKeys");
         if (cache =3D=3D null) {
@@ -210,6 +221,9 @@
     }
 =

     public List findByTypeAndLeftObjectKey(String type, ObjectKey leftObje=
ctKey) {
+        if (!typeExists(type)) {
+            return emptyList;
+        }
         List objectLinks =3D null;
         Cache cache =3D cacheService.getCache(CACHE_NAME+"findByTypeAndLef=
tObjectKey");
         if (cache =3D=3D null) {
@@ -240,6 +254,9 @@
     }
 =

     public List findByTypeAndRightObjectKey(String type, ObjectKey rightOb=
jectKey) {
+        if (!typeExists(type)) {
+            return emptyList;
+        }
         List objectLinks =3D null;
         Cache cache =3D cacheService.getCache(CACHE_NAME+"findByTypeAndRig=
htObjectKey");
         if (cache =3D=3D null) {
@@ -270,6 +287,9 @@
     }
 =

     public List findByTypeAndRightObjectKey(String type, ObjectKey[] right=
ObjectKeys) {
+        if (!typeExists(type)) {
+            return emptyList;
+        }
         List objectLinks =3D null;
         String[] keys =3D new String[rightObjectKeys.length];
         for ( int i=3D0; i<rightObjectKeys.length; i++ ){
@@ -301,6 +321,36 @@
         dao.delete(jahiaLink);
     }
 =

+    public boolean typeExists(String type) {
+        Cache cache =3D cacheService.getCache(CACHE_NAME+"Count");
+        if (cache =3D=3D null) {
+            try {
+                cache =3D cacheService.createCacheInstance(CACHE_NAME+"Cou=
nt");
+            } catch (JahiaInitializationException e) {
+                log.warn("Could not initialize cache " + CACHE_NAME+"Count=
", e);
+            }
+        }
+        Boolean b =3D (Boolean) cache.get(type);
+        if (b =3D=3D null) {
+            Integer i =3D dao.countType(type);
+            b =3D Boolean.valueOf(i.intValue() > 0);
+            cache.put(type, b);
+        }
+        return b.booleanValue();
+    }
+
+    public void createType(String type) {
+        Cache cache =3D cacheService.getCache(CACHE_NAME+"Count");
+        if (cache =3D=3D null) {
+            try {
+                cache =3D cacheService.createCacheInstance(CACHE_NAME+"Cou=
nt");
+            } catch (JahiaInitializationException e) {
+                log.warn("Could not initialize cache " + CACHE_NAME+"Count=
", e);
+            }
+        }
+        cache.put(type, Boolean.TRUE);
+    }
+
     private void flushCache(String leftOid, String rightOid) {
         final String leftKey =3D CACHE_KEY_LEFTPREFIX + leftOid;
         final String rightKey =3D CACHE_KEY_RIGHTPREFIX + rightOid;
@@ -335,16 +385,17 @@
     public void updateObjectLink(ObjectLink objectLink) {
         int fieldId =3D objectLink.getID();
         if(objectLink.getLeftObjectKey().getIdInType()>0 && objectLink.get=
RightObjectKey().getIdInType()>0) {
-        final JahiaLink jahiaLink =3D fillJahiaLink(objectLink);
-        if (fieldId > 0) {
-            jahiaLink.setId(new Integer(fieldId));
-        }
-        dao.save(jahiaLink);
-        objectLink.setID(jahiaLink.getId().intValue());
-        flushCache(jahiaLink.getLeftOid(), jahiaLink.getRightOid());
+            final JahiaLink jahiaLink =3D fillJahiaLink(objectLink);
+            if (fieldId > 0) {
+                jahiaLink.setId(new Integer(fieldId));
+            }
+            dao.save(jahiaLink);
+            createType(objectLink.getType());
+            objectLink.setID(jahiaLink.getId().intValue());
+            flushCache(jahiaLink.getLeftOid(), jahiaLink.getRightOid());
         } else {
             if(fieldId >0)
-            removeObjectLink(fieldId);
+                removeObjectLink(fieldId);
         }
     }
 =


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

Reply via email to