KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > blandware > atleap > persistence > hibernate > core > ContentFieldValueDAOHibernate


1 /*
2  * Copyright 2004 Blandware (http://www.blandware.com)
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

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 JavaDoc;
26 import java.util.Date JavaDoc;
27 import java.util.List JavaDoc;
28 import java.util.ListIterator JavaDoc;
29
30 /**
31  * <p>Hibernate implementation of ContentFieldValueDAO</p>
32  * <p><a HREF="ContentFieldValueDAOHibernate.java.htm"><i>View Source</i></a></p>
33  *
34  * @author Sergey Zubtcovskii <a HREF="mailto:sergey.zubtcovskii@blandware.com">&lt;sergey.zubtcovskii@blandware.com&gt;</a>
35  * @version $Revision: 1.24 $ $Date: 2005/08/06 17:13:04 $
36  */

37 public class ContentFieldValueDAOHibernate extends BaseDAOHibernate implements ContentFieldValueDAO {
38
39     /**
40      * Creates new instance of ContentFieldValueDAOHibernate
41      */

42     public ContentFieldValueDAOHibernate() {
43     }
44
45     // ~ CRUD Methods ================================================================
46

47     /**
48      * @see com.blandware.atleap.persistence.core.ContentFieldValueDAO#createContentFieldValue(com.blandware.atleap.model.core.ContentFieldValue, com.blandware.atleap.model.core.ContentField, com.blandware.atleap.model.core.ContentLocale)
49      */

50     public Long JavaDoc createContentFieldValue(ContentFieldValue contentFieldValue, ContentField field, ContentLocale contentLocale) {
51         contentFieldValue.setLastUpdatedDatetime(new Date JavaDoc());
52         field.addContentFieldValue(contentFieldValue);
53         contentFieldValue.setContentLocale(contentLocale);
54         return (Long JavaDoc) getHibernateTemplate().save(contentFieldValue);
55     }
56
57     /**
58      * @see com.blandware.atleap.persistence.core.ContentFieldValueDAO#retrieveContentFieldValue(java.lang.Long)
59      */

60     public ContentFieldValue retrieveContentFieldValue(Long JavaDoc contentFieldValueId) {
61         return (ContentFieldValue) getHibernateTemplate().get(ContentFieldValue.class, contentFieldValueId);
62     }
63
64     /**
65      * @see com.blandware.atleap.persistence.core.ContentFieldValueDAO#updateContentFieldValue(com.blandware.atleap.model.core.ContentFieldValue, com.blandware.atleap.model.core.ContentField, com.blandware.atleap.model.core.ContentLocale)
66      */

67     public void updateContentFieldValue(ContentFieldValue contentFieldValue, ContentField field, ContentLocale contentLocale) {
68         contentFieldValue.setLastUpdatedDatetime(new Date JavaDoc());
69         ContentFieldValue oldContentFieldValue = field.updateContentFieldValue(contentFieldValue);
70         removeFromCache(oldContentFieldValue);
71         contentFieldValue.setContentLocale(contentLocale);
72         getHibernateTemplate().update(contentFieldValue);
73     }
74
75     /**
76      * @see com.blandware.atleap.persistence.core.ContentFieldValueDAO#deleteContentFieldValue(com.blandware.atleap.model.core.ContentFieldValue)
77      */

78     public void deleteContentFieldValue(ContentFieldValue contentFieldValue) {
79         getHibernateTemplate().delete(contentFieldValue);
80         contentFieldValue.getContentField().removeContentFieldValue(contentFieldValue);
81     }
82
83     // ~ Additional methods ================================================================
84

85     /**
86      * @see com.blandware.atleap.persistence.core.ContentFieldValueDAO#listContentFieldValues(com.blandware.atleap.common.util.QueryInfo)
87      */

88     public PartialCollection listContentFieldValues(QueryInfo queryInfo) {
89         String JavaDoc whereClause = new String JavaDoc();
90         String JavaDoc orderByClause = new String JavaDoc();
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 JavaDoc();
98             }
99             if ( orderByClause != null && orderByClause.length() != 0 ) {
100                 orderByClause = " order by " + orderByClause;
101             } else {
102                 orderByClause = new String JavaDoc();
103             }
104         }
105
106         Long JavaDoc contentFieldId = (Long JavaDoc) queryInfo.getQueryParameters().get("contentFieldId");
107         List JavaDoc list = null;
108         Integer JavaDoc total = null;
109         String JavaDoc hqlPart = "from ContentFieldValue c where (c.contentField.id = ?) " + whereClause;
110         if ( queryInfo != null && (queryInfo.getLimit() != null || queryInfo.getOffset() != null) ) {
111             String JavaDoc hqlForTotal = "select count(c.id) " + hqlPart;
112             total = (Integer JavaDoc) findUniqueResult(hqlForTotal, new Object JavaDoc[]{contentFieldId});
113             if ( total == null ) {
114                 total = new Integer JavaDoc(0);
115             }
116         }
117         // If we don't have any info about the total number of results yet or
118
// we know that there's something that will be found, then fetch data
119
if ( total == null || total.intValue() > 0 ) {
120             String JavaDoc hql = "select c.id, c.contentLocale, c.lastUpdatedDatetime " + hqlPart + orderByClause;
121             list = executeFind(hql, queryInfo, new Object JavaDoc[]{contentFieldId});
122             if ( total == null ) {
123                 total = new Integer JavaDoc(list.size());
124             }
125             for ( ListIterator JavaDoc i = list.listIterator(); i.hasNext(); ) {
126                 Object JavaDoc[] objects = (Object JavaDoc[]) i.next();
127                 ContentFieldValue contentFieldValue = new ContentFieldValue();
128                 contentFieldValue.setId((Long JavaDoc) objects[0]);
129                 contentFieldValue.setContentLocale((ContentLocale) objects[1]);
130                 contentFieldValue.setLastUpdatedDatetime((Date JavaDoc) objects[2]);
131                 i.set(contentFieldValue);
132             }
133         } else {
134             list = new ArrayList JavaDoc();
135         }
136         return new PartialCollection(list, total);
137     }
138
139     /**
140      * @see com.blandware.atleap.persistence.core.ContentFieldValueDAO#hasDuplicates(com.blandware.atleap.model.core.ContentFieldValue, Long, String)
141      */

142     public boolean hasDuplicates(ContentFieldValue contentFieldValue, Long JavaDoc fieldId, String JavaDoc localeIdentifier) {
143
144         ArrayList JavaDoc args = new ArrayList JavaDoc();
145         args.add(fieldId);
146         args.add(localeIdentifier);
147
148         String JavaDoc 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 JavaDoc) findUniqueResult(hql, args.toArray())).intValue();
155
156         return count > 0;
157     }
158
159     // ~ Finders ================================================================
160

161     /**
162      * @see com.blandware.atleap.persistence.core.ContentFieldValueDAO#findContentFieldValueByContentFieldAndLocale(com.blandware.atleap.model.core.ContentField, com.blandware.atleap.model.core.ContentLocale)
163      */

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 JavaDoc[]{field, contentLocale});
166     }
167
168     /**
169      * @see com.blandware.atleap.persistence.core.ContentFieldValueDAO#findContentFieldValueByUriAndIdentifierAndLocale(java.lang.String, java.lang.String, java.lang.String)
170      */

171     public ContentFieldValue findContentFieldValueByUriAndIdentifierAndLocale(String JavaDoc uri, String JavaDoc identifier, String JavaDoc localeIdentifier) {
172         String JavaDoc 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 JavaDoc[]{uri, identifier, localeIdentifier});
174         if ( contentFieldValue == null ) {
175             // Try to look for CFV in default locale
176
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 JavaDoc[]{uri, identifier});
178         }
179         return contentFieldValue;
180     }
181
182     /**
183      * @see com.blandware.atleap.persistence.core.ContentFieldValueDAO#findContentFieldValueByDefinitionAndIdentifierAndLocale(java.lang.String, java.lang.String, java.lang.String)
184      */

185     public ContentFieldValue findContentFieldValueByDefinitionAndIdentifierAndLocale(String JavaDoc definition, String JavaDoc identifier, String JavaDoc localeIdentifier) {
186         String JavaDoc 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 JavaDoc[]{definition, identifier, localeIdentifier});
188         if ( contentFieldValue == null ) {
189             // Try to look for CFV in default locale
190
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 JavaDoc[]{definition, identifier});
192         }
193         return contentFieldValue;
194     }
195
196     /**
197      * @see com.blandware.atleap.persistence.core.ContentFieldValueDAO#findContentFieldValueByLocalizableIdAndIdentifierAndLocale(java.lang.Long, java.lang.String, java.lang.String)
198      */

199     public ContentFieldValue findContentFieldValueByLocalizableIdAndIdentifierAndLocale(Long JavaDoc localizableId, String JavaDoc identifier, String JavaDoc localeIdentifier) {
200         String JavaDoc 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 JavaDoc[]{localizableId, identifier, localeIdentifier});
202         if ( contentFieldValue == null ) {
203             // Try to look for CFV in default locale
204
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 JavaDoc[]{localizableId, identifier});
206         }
207         return contentFieldValue;
208     }
209
210 }
211
Popular Tags