1 16 package com.blandware.atleap.persistence.hibernate.core; 17 18 import com.blandware.atleap.common.util.PartialCollection; 19 import com.blandware.atleap.common.util.QueryInfo; 20 import com.blandware.atleap.model.core.ContentField; 21 import com.blandware.atleap.model.core.ContentFieldValue; 22 import com.blandware.atleap.model.core.ContentLocale; 23 import com.blandware.atleap.persistence.core.ContentFieldValueDAO; 24 25 import java.util.ArrayList ; 26 import java.util.Date ; 27 import java.util.List ; 28 import java.util.ListIterator ; 29 30 37 public class ContentFieldValueDAOHibernate extends BaseDAOHibernate implements ContentFieldValueDAO { 38 39 42 public ContentFieldValueDAOHibernate() { 43 } 44 45 47 50 public Long createContentFieldValue(ContentFieldValue contentFieldValue, ContentField field, ContentLocale contentLocale) { 51 contentFieldValue.setLastUpdatedDatetime(new Date ()); 52 field.addContentFieldValue(contentFieldValue); 53 contentFieldValue.setContentLocale(contentLocale); 54 return (Long ) getHibernateTemplate().save(contentFieldValue); 55 } 56 57 60 public ContentFieldValue retrieveContentFieldValue(Long contentFieldValueId) { 61 return (ContentFieldValue) getHibernateTemplate().get(ContentFieldValue.class, contentFieldValueId); 62 } 63 64 67 public void updateContentFieldValue(ContentFieldValue contentFieldValue, ContentField field, ContentLocale contentLocale) { 68 contentFieldValue.setLastUpdatedDatetime(new Date ()); 69 ContentFieldValue oldContentFieldValue = field.updateContentFieldValue(contentFieldValue); 70 removeFromCache(oldContentFieldValue); 71 contentFieldValue.setContentLocale(contentLocale); 72 getHibernateTemplate().update(contentFieldValue); 73 } 74 75 78 public void deleteContentFieldValue(ContentFieldValue contentFieldValue) { 79 getHibernateTemplate().delete(contentFieldValue); 80 contentFieldValue.getContentField().removeContentFieldValue(contentFieldValue); 81 } 82 83 85 88 public PartialCollection listContentFieldValues(QueryInfo queryInfo) { 89 String whereClause = new String (); 90 String orderByClause = new String (); 91 if ( queryInfo != null ) { 92 whereClause = queryInfo.getWhereClause(); 93 orderByClause = queryInfo.getOrderByClause(); 94 if ( whereClause != null && whereClause.length() != 0 ) { 95 whereClause = " and " + whereClause; 96 } else { 97 whereClause = new String (); 98 } 99 if ( orderByClause != null && orderByClause.length() != 0 ) { 100 orderByClause = " order by " + orderByClause; 101 } else { 102 orderByClause = new String (); 103 } 104 } 105 106 Long contentFieldId = (Long ) queryInfo.getQueryParameters().get("contentFieldId"); 107 List list = null; 108 Integer total = null; 109 String hqlPart = "from ContentFieldValue c where (c.contentField.id = ?) " + whereClause; 110 if ( queryInfo != null && (queryInfo.getLimit() != null || queryInfo.getOffset() != null) ) { 111 String hqlForTotal = "select count(c.id) " + hqlPart; 112 total = (Integer ) findUniqueResult(hqlForTotal, new Object []{contentFieldId}); 113 if ( total == null ) { 114 total = new Integer (0); 115 } 116 } 117 if ( total == null || total.intValue() > 0 ) { 120 String hql = "select c.id, c.contentLocale, c.lastUpdatedDatetime " + hqlPart + orderByClause; 121 list = executeFind(hql, queryInfo, new Object []{contentFieldId}); 122 if ( total == null ) { 123 total = new Integer (list.size()); 124 } 125 for ( ListIterator i = list.listIterator(); i.hasNext(); ) { 126 Object [] objects = (Object []) i.next(); 127 ContentFieldValue contentFieldValue = new ContentFieldValue(); 128 contentFieldValue.setId((Long ) objects[0]); 129 contentFieldValue.setContentLocale((ContentLocale) objects[1]); 130 contentFieldValue.setLastUpdatedDatetime((Date ) objects[2]); 131 i.set(contentFieldValue); 132 } 133 } else { 134 list = new ArrayList (); 135 } 136 return new PartialCollection(list, total); 137 } 138 139 142 public boolean hasDuplicates(ContentFieldValue contentFieldValue, Long fieldId, String localeIdentifier) { 143 144 ArrayList args = new ArrayList (); 145 args.add(fieldId); 146 args.add(localeIdentifier); 147 148 String hql = "select count(c.id) from ContentFieldValue c where c.contentField.id = ? and c.contentLocale.identifier = ?"; 149 if ( contentFieldValue.getId() != null ) { 150 hql += " and c.id != ?"; 151 args.add(contentFieldValue.getId()); 152 } 153 154 int count = ((Integer ) findUniqueResult(hql, args.toArray())).intValue(); 155 156 return count > 0; 157 } 158 159 161 164 public ContentFieldValue findContentFieldValueByContentFieldAndLocale(ContentField field, ContentLocale contentLocale) { 165 return (ContentFieldValue) findUniqueResult("select c from ContentFieldValue c where c.contentField = ? and c.contentLocale = ?", new Object []{field, contentLocale}); 166 } 167 168 171 public ContentFieldValue findContentFieldValueByUriAndIdentifierAndLocale(String uri, String identifier, String localeIdentifier) { 172 String hql = "select value from Page page inner join page.contentFields field inner join field.contentFieldValues value where page.uri = ? and field.identifier = ? and value.contentLocale.identifier = ?"; 173 ContentFieldValue contentFieldValue = (ContentFieldValue) findUniqueResult(hql, new Object []{uri, identifier, localeIdentifier}); 174 if ( contentFieldValue == null ) { 175 hql = "select value from Page page inner join page.contentFields field inner join field.contentFieldValues value where page.uri = ? and field.identifier = ? and value.contentLocale.defaultInstance = 'T'"; 177 contentFieldValue = (ContentFieldValue) findUniqueResult(hql, new Object []{uri, identifier}); 178 } 179 return contentFieldValue; 180 } 181 182 185 public ContentFieldValue findContentFieldValueByDefinitionAndIdentifierAndLocale(String definition, String identifier, String localeIdentifier) { 186 String hql = "select value from Layout layout inner join layout.contentFields field inner join field.contentFieldValues value where layout.definition = ? and field.identifier = ? and value.contentLocale.identifier = ?"; 187 ContentFieldValue contentFieldValue = (ContentFieldValue) findUniqueResult(hql, new Object []{definition, identifier, localeIdentifier}); 188 if ( contentFieldValue == null ) { 189 hql = "select value from Layout layout inner join layout.contentFields field inner join field.contentFieldValues value where layout.definition = ? and field.identifier = ? and value.contentLocale.defaultInstance = 'T'"; 191 contentFieldValue = (ContentFieldValue) findUniqueResult(hql, new Object []{definition, identifier}); 192 } 193 return contentFieldValue; 194 } 195 196 199 public ContentFieldValue findContentFieldValueByLocalizableIdAndIdentifierAndLocale(Long localizableId, String identifier, String localeIdentifier) { 200 String hql = "select value from Localizable localizable inner join localizable.contentFields field inner join field.contentFieldValues value where localizable.id = ? and field.identifier = ? and value.contentLocale.identifier = ?"; 201 ContentFieldValue contentFieldValue = (ContentFieldValue) findUniqueResult(hql, new Object []{localizableId, identifier, localeIdentifier}); 202 if ( contentFieldValue == null ) { 203 hql = "select value from Localizable localizable inner join localizable.contentFields field inner join field.contentFieldValues value where localizable.id = ? and field.identifier = ? and value.contentLocale.defaultInstance = 'T'"; 205 contentFieldValue = (ContentFieldValue) findUniqueResult(hql, new Object []{localizableId, identifier}); 206 } 207 return contentFieldValue; 208 } 209 210 } 211 | Popular Tags |