KickJava   Java API By Example, From Geeks To Geeks.

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


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.common.util.StringUtil;
21 import com.blandware.atleap.model.core.ContentField;
22 import com.blandware.atleap.model.core.Localizable;
23 import com.blandware.atleap.persistence.core.ContentFieldDAO;
24
25 import java.util.ArrayList JavaDoc;
26 import java.util.List JavaDoc;
27
28 /**
29  * <p>Hibernate implementation of ContentFieldDAO</p>
30  * <p><a HREF="ContentFieldDAOHibernate.java.htm"><i>View Source</i></a></p>
31  *
32  * @author Sergey Zubtcovskii <a HREF="mailto:sergey.zubtcovskii@blandware.com">&lt;sergey.zubtcovskii@blandware.com&gt;</a>
33  * @version $Revision: 1.28 $ $Date: 2005/08/06 17:13:04 $
34  */

35 public class ContentFieldDAOHibernate extends BaseDAOHibernate implements ContentFieldDAO {
36
37     // ~ CRUD Methods ================================================================
38

39     /**
40      * @see com.blandware.atleap.persistence.core.ContentFieldDAO#createContentField(com.blandware.atleap.model.core.ContentField, com.blandware.atleap.model.core.Localizable)
41      */

42     public Long JavaDoc createContentField(ContentField contentField, Localizable localizable) {
43         localizable.addContentField(contentField);
44         return (Long JavaDoc) getHibernateTemplate().save(contentField);
45     }
46
47     /**
48      * @see com.blandware.atleap.persistence.core.ContentFieldDAO#retrieveContentField(java.lang.Long)
49      */

50     public ContentField retrieveContentField(Long JavaDoc contentFieldId) {
51         return (ContentField) getHibernateTemplate().get(ContentField.class, contentFieldId);
52     }
53
54     /**
55      * @see com.blandware.atleap.persistence.core.ContentFieldDAO#updateContentField(com.blandware.atleap.model.core.ContentField, com.blandware.atleap.model.core.Localizable)
56      */

57     public void updateContentField(ContentField contentField, Localizable localizable) {
58         ContentField oldContentField = localizable.updateContentField(contentField);
59         removeFromCache(oldContentField);
60         getHibernateTemplate().update(contentField);
61     }
62
63     /**
64      * @see com.blandware.atleap.persistence.core.ContentFieldDAO#deleteContentField(com.blandware.atleap.model.core.ContentField)
65      */

66     public void deleteContentField(ContentField contentField) {
67         getHibernateTemplate().delete(contentField);
68         contentField.getOwner().removeContentField(contentField);
69     }
70
71     // ~ Additional methods ================================================================
72

73
74     /**
75      * @see com.blandware.atleap.persistence.core.ContentFieldDAO#listContentFields(com.blandware.atleap.common.util.QueryInfo)
76      */

77     public PartialCollection listContentFields(QueryInfo queryInfo) {
78         String JavaDoc whereClause = new String JavaDoc();
79         String JavaDoc orderByClause = new String JavaDoc();
80         if ( queryInfo != null ) {
81             whereClause = queryInfo.getWhereClause();
82             orderByClause = queryInfo.getOrderByClause();
83             if ( whereClause != null && whereClause.length() != 0 ) {
84                 whereClause = " and " + whereClause;
85             } else {
86                 whereClause = new String JavaDoc();
87             }
88             if ( orderByClause != null && orderByClause.length() != 0 ) {
89                 orderByClause = " order by " + orderByClause;
90             } else {
91                 orderByClause = new String JavaDoc();
92             }
93         }
94
95         Long JavaDoc ownerId = null;
96         if ( queryInfo != null ) {
97             if ( queryInfo.getQueryParameters() != null ) {
98                 ownerId = (Long JavaDoc) queryInfo.getQueryParameters().get("ownerId");
99             }
100         }
101         List JavaDoc list = null;
102         Integer JavaDoc total = null;
103         ArrayList JavaDoc args = new ArrayList JavaDoc();
104         String JavaDoc hqlPart = new String JavaDoc();
105         if ( ownerId != null ) {
106             hqlPart = "from ContentField f where (f.owner.id = ?) and (f.internal = 'F')" + whereClause;
107             args.add(ownerId);
108         } else {
109             hqlPart = "from ContentField f where (f.internal = 'T')" + whereClause;
110         }
111         if ( queryInfo != null && (queryInfo.getLimit() != null || queryInfo.getOffset() != null) ) {
112             String JavaDoc hqlForTotal = "select count(f.id) " + hqlPart;
113             total = (Integer JavaDoc) findUniqueResult(hqlForTotal, args.toArray());
114             if ( total == null ) {
115                 total = new Integer JavaDoc(0);
116             }
117         }
118         // If we don't have any info about the total number of results yet or
119
// we know that there's something that will be found, then fetch data
120
if ( total == null || total.intValue() > 0 ) {
121             String JavaDoc hql = "select f " + hqlPart + orderByClause;
122             list = executeFind(hql, queryInfo, args.toArray());
123             if ( total == null ) {
124                 total = new Integer JavaDoc(list.size());
125             }
126         } else {
127             list = new ArrayList JavaDoc();
128         }
129         return new PartialCollection(list, total);
130
131     }
132
133     /**
134      * @see com.blandware.atleap.persistence.core.ContentFieldDAO#hasDuplicates(com.blandware.atleap.model.core.ContentField, Long)
135      */

136     public boolean hasDuplicates(ContentField contentField, Long JavaDoc ownerId) {
137
138         ArrayList JavaDoc args = new ArrayList JavaDoc();
139         args.add(contentField.getIdentifier());
140         args.add(ownerId);
141
142         String JavaDoc hql = "select count(f.id) from ContentField f where f.identifier = ? and f.owner.id = ?";
143         if ( contentField.getId() != null ) {
144             hql += " and f.id != ?";
145             args.add(contentField.getId());
146         }
147
148         int count = ((Integer JavaDoc) findUniqueResult(hql, args.toArray())).intValue();
149
150         return count > 0;
151     }
152
153     // ~ Finders ================================================================
154

155     /**
156      * @see com.blandware.atleap.persistence.core.ContentFieldDAO#findContentFieldByLayoutDefinition(java.lang.String, java.lang.String)
157      */

158     public ContentField findContentFieldByLayoutDefinition(String JavaDoc identifier, String JavaDoc definition) {
159         return (ContentField) findUniqueResult("select field from Layout layout inner join layout.contentFields field where layout.definition = ? and field.identifier = ?", new Object JavaDoc[]{definition, identifier});
160     }
161
162     /**
163      * @see com.blandware.atleap.persistence.core.ContentFieldDAO#findIndexedContentFieldsByLayoutDefinitionAndLocale(java.lang.String, java.lang.String, java.lang.String)
164      */

165     public List JavaDoc findIndexedContentFieldsByLayoutDefinitionAndLocale(String JavaDoc identifier, String JavaDoc definition, String JavaDoc locale) {
166         String JavaDoc hql = new StringBuffer JavaDoc("select distinct field from Layout layout inner join layout.contentFields field inner join field.contentFieldValues value ")
167                 .append("where ")
168                 .append("field.identifier like '")
169                 .append(StringUtil.escape(identifier)).append("[%]' ")
170                 .append("and layout.definition = ? ")
171                 .append("and (value.contentLocale.identifier = ? or value.contentLocale.defaultInstance = 'T')")
172                 .toString();
173         return executeFind(hql, new Object JavaDoc[]{definition, locale});
174     }
175
176     /**
177      * @see com.blandware.atleap.persistence.core.ContentFieldDAO#findContentFieldByPageUri(java.lang.String, java.lang.String)
178      */

179     public ContentField findContentFieldByPageUri(String JavaDoc identifier, String JavaDoc uri) {
180         return (ContentField) findUniqueResult("select field from Page page inner join page.contentFields field where page.uri = ? and field.identifier = ?", new Object JavaDoc[]{uri, identifier});
181     }
182
183     /**
184      * @see com.blandware.atleap.persistence.core.ContentFieldDAO#findIndexedContentFieldsByPageUriAndLocale(java.lang.String, java.lang.String, java.lang.String)
185      */

186     public List JavaDoc findIndexedContentFieldsByPageUriAndLocale(String JavaDoc identifier, String JavaDoc uri, String JavaDoc locale) {
187         String JavaDoc hql = new StringBuffer JavaDoc("select distinct field from Page page inner join page.contentFields field inner join field.contentFieldValues value ")
188                 .append("where ").append("field.identifier like '")
189                 .append(StringUtil.escape(identifier)).append("[%]' ")
190                 .append("and page.uri = ? ")
191                 .append("and (value.contentLocale.identifier = ? or value.contentLocale.defaultInstance = 'T')")
192                 .toString();
193         return executeFind(hql, new Object JavaDoc[]{uri, locale});
194     }
195
196     /**
197      * @see com.blandware.atleap.persistence.core.ContentFieldDAO#findContentFieldByLocalizable(java.lang.String, com.blandware.atleap.model.core.Localizable)
198      */

199     public ContentField findContentFieldByLocalizable(String JavaDoc identifier, Localizable localizable) {
200         return (ContentField) findUniqueResult("from ContentField f where f.identifier = ? and f.owner = ?", new Object JavaDoc[]{identifier, localizable});
201     }
202 }
203
204
Popular Tags