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