KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > infoglue > cms > treeservice > ss > SiteNodeNodeSupplier


1 /* ===============================================================================
2  *
3  * Part of the InfoGlue Content Management Platform (www.infoglue.org)
4  *
5  * ===============================================================================
6  *
7  * Copyright (C)
8  *
9  * This program is free software; you can redistribute it and/or modify it under
10  * the terms of the GNU General Public License version 2, as published by the
11  * Free Software Foundation. See the file LICENSE.html for more information.
12  *
13  * This program is distributed in the hope that it will be useful, but WITHOUT
14  * ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
15  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License along with
18  * this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
19  * Place, Suite 330 / Boston, MA 02111-1307 / USA.
20  *
21  * ===============================================================================
22  */

23
24 package org.infoglue.cms.treeservice.ss;
25
26 import java.util.ArrayList JavaDoc;
27 import java.util.Collection JavaDoc;
28 import java.util.Collections JavaDoc;
29 import java.util.Iterator JavaDoc;
30 import java.util.List JavaDoc;
31
32 import org.apache.log4j.Logger;
33 import org.exolab.castor.jdo.Database;
34 import org.infoglue.cms.controllers.kernel.impl.simple.CastorDatabaseService;
35 import org.infoglue.cms.controllers.kernel.impl.simple.ContentController;
36 import org.infoglue.cms.controllers.kernel.impl.simple.ContentVersionController;
37 import org.infoglue.cms.controllers.kernel.impl.simple.LanguageController;
38 import org.infoglue.cms.controllers.kernel.impl.simple.SiteNodeController;
39 import org.infoglue.cms.controllers.usecases.structuretool.ViewSiteNodeTreeUCC;
40 import org.infoglue.cms.controllers.usecases.structuretool.ViewSiteNodeTreeUCCFactory;
41 import org.infoglue.cms.entities.content.Content;
42 import org.infoglue.cms.entities.content.ContentVO;
43 import org.infoglue.cms.entities.content.ContentVersion;
44 import org.infoglue.cms.entities.content.ContentVersionVO;
45 import org.infoglue.cms.entities.management.Language;
46 import org.infoglue.cms.entities.management.LanguageVO;
47 import org.infoglue.cms.entities.structure.SiteNode;
48 import org.infoglue.cms.entities.structure.SiteNodeVO;
49 import org.infoglue.cms.exception.ConstraintException;
50 import org.infoglue.cms.exception.SystemException;
51 import org.infoglue.cms.security.InfoGluePrincipal;
52 import org.infoglue.cms.util.CmsPropertyHandler;
53 import org.infoglue.cms.util.ConstraintExceptionBuffer;
54 import org.infoglue.cms.util.sorters.ReflectionComparator;
55 import org.infoglue.cms.util.sorters.SiteNodeComparator;
56 import org.infoglue.deliver.util.Timer;
57
58 import com.frovi.ss.Tree.BaseNode;
59 import com.frovi.ss.Tree.BaseNodeSupplier;
60
61 /**
62  * ContentNodeSupplier.java
63  * Created on 2002-sep-30
64  * @author Stefan Sik, ss@frovi.com
65  * ss
66  */

67 public class SiteNodeNodeSupplier extends BaseNodeSupplier
68 {
69
70     private final static Logger logger = Logger.getLogger(SiteNodeNodeSupplier.class.getName());
71
72     private ViewSiteNodeTreeUCC ucc;
73     private ArrayList JavaDoc cacheLeafs;
74
75     
76     public SiteNodeNodeSupplier(Integer JavaDoc repositoryId, InfoGluePrincipal infoGluePrincipal) throws SystemException
77     {
78         SiteNodeVO vo =null;
79         ucc = ViewSiteNodeTreeUCCFactory.newViewSiteNodeTreeUCC();
80         try
81         {
82             vo = ucc.getRootSiteNode(repositoryId, infoGluePrincipal);
83             BaseNode rootNode = new SiteNodeNodeImpl();
84             rootNode.setChildren(true);
85             rootNode.setId(vo.getId());
86             rootNode.setTitle(vo.getName());
87             rootNode.setContainer(vo.getIsBranch().booleanValue());
88             
89             setRootNode(rootNode);
90         }
91         catch (ConstraintException e)
92         {
93             e.printStackTrace();
94         }
95             
96     }
97     /**
98      * @see com.frovi.ss.Tree.BaseNodeSupplier#hasChildren()
99      */

100     public boolean hasChildren()
101     {
102         return false;
103     }
104
105     /**
106      * @see com.frovi.ss.Tree.INodeSupplier#getChildContainerNodes(Integer)
107      */

108     /*
109     public Collection getChildContainerNodes(Integer parentNode) throws SystemException, Exception
110     {
111         Timer timer = new Timer();
112
113         ArrayList ret = new ArrayList();
114         cacheLeafs = new ArrayList();
115         
116         List children = null;
117         try
118         {
119             children = ucc.getSiteNodeChildren(parentNode);
120         }
121         catch (ConstraintException e)
122         {
123             logger.warn("Error getting SiteNode Children", e);
124         }
125         catch (SystemException e)
126         {
127             logger.warn("Error getting SiteNode Children", e);
128         }
129         
130         //Sort the tree nodes if setup to do so
131         String sortProperty = CmsPropertyHandler.getStructureTreeSort();
132         if(sortProperty != null)
133             Collections.sort(children, new ReflectionComparator(sortProperty));
134         
135         Iterator i = children.iterator();
136         while(i.hasNext())
137         {
138             SiteNodeVO vo = (SiteNodeVO) i.next();
139             
140             BaseNode node = new SiteNodeNodeImpl();
141             node.setId(vo.getId());
142             node.setTitle(vo.getName());
143             
144             if (vo.getIsBranch().booleanValue())
145             {
146                 node.setContainer(true);
147                 node.setChildren((vo.getChildCount().intValue() > 0)); //
148                 ret.add(node);
149             }
150             else
151             {
152                 node.setContainer(false);
153                 cacheLeafs.add(node);
154             }
155             
156         }
157         
158         timer.printElapsedTime("ChildNodes took...");
159
160         return ret;
161     }
162 */

163     /**
164      * @see com.frovi.ss.Tree.INodeSupplier#getChildContainerNodes(Integer)
165      */

166     public Collection JavaDoc getChildContainerNodes(Integer JavaDoc parentNode) throws SystemException, Exception JavaDoc
167     {
168         Timer timer = new Timer();
169         
170         Database db = CastorDatabaseService.getDatabase();
171         ConstraintExceptionBuffer ceb = new ConstraintExceptionBuffer();
172
173         ArrayList JavaDoc ret = new ArrayList JavaDoc();
174         cacheLeafs = new ArrayList JavaDoc();
175         //List children = null;
176

177         String JavaDoc sortProperty = CmsPropertyHandler.getStructureTreeSort();
178         String JavaDoc isHiddenProperty = CmsPropertyHandler.getStructureTreeIsHiddenProperty();
179
180         beginTransaction(db);
181
182         try
183         {
184             SiteNode parentSiteNode = SiteNodeController.getSiteNodeWithId(parentNode, db, true);
185             Collection JavaDoc children = parentSiteNode.getChildSiteNodes();
186             List JavaDoc childrenVOList = SiteNodeController.toVOList(children);
187
188             Iterator JavaDoc childrenVOListIterator = childrenVOList.iterator();
189             while(childrenVOListIterator.hasNext())
190             {
191                 SiteNodeVO siteNodeVO = (SiteNodeVO)childrenVOListIterator.next();
192                 if(siteNodeVO.getMetaInfoContentId() != null && siteNodeVO.getMetaInfoContentId().intValue() > -1)
193                 {
194                     Content content = ContentController.getContentController().getContentWithId(siteNodeVO.getMetaInfoContentId(), db);
195         
196                     LanguageVO masterLanguage = LanguageController.getController().getMasterLanguage(content.getValueObject().getRepositoryId(), db);
197                     ContentVersion contentVersion = ContentVersionController.getContentVersionController().getLatestActiveContentVersion(content.getId(), masterLanguage.getId(), db);
198                     
199                     if(sortProperty != null)
200                     {
201                         String JavaDoc[] sortOrders = sortProperty.split(",");
202                         for(int i=sortOrders.length - 1; i > -1; i--)
203                         {
204                             String JavaDoc sortOrderProperty = sortOrders[i].trim();
205                             //System.out.println("sortOrderProperty:" + sortOrderProperty);
206

207                             if(contentVersion != null && sortOrderProperty.startsWith("extra:"))
208                             {
209                                 sortOrderProperty = sortOrderProperty.substring(6);
210                                 String JavaDoc propertyValue = ContentVersionController.getContentVersionController().getAttributeValue(contentVersion.getValueObject(), sortOrderProperty, false);
211                                 siteNodeVO.getExtraProperties().put(sortOrderProperty, propertyValue);
212     
213                                 if(isHiddenProperty != null && !isHiddenProperty.equals(""))
214                                 {
215                                     String JavaDoc hiddenProperty = ContentVersionController.getContentVersionController().getAttributeValue(contentVersion.getValueObject(), isHiddenProperty, false);
216                                     if(hiddenProperty == null || hiddenProperty.equals(""))
217                                         hiddenProperty = "false";
218                                     
219                                     siteNodeVO.getExtraProperties().put("isHidden", hiddenProperty);
220                                 }
221                             }
222                         }
223                     }
224                 }
225             }
226
227             //Sort the tree nodes if setup to do so
228
if(sortProperty != null)
229             {
230                 String JavaDoc[] sortOrders = sortProperty.split(",");
231                 for(int i=sortOrders.length - 1; i > -1; i--)
232                 {
233                     String JavaDoc sortOrderProperty = sortOrders[i].trim();
234                     //System.out.println("sortOrderProperty:" + sortOrderProperty);
235
if(sortOrderProperty.startsWith("extra:"))
236                         sortOrderProperty = sortOrderProperty.substring(6);
237                         
238                     Collections.sort(childrenVOList, new SiteNodeComparator(sortOrderProperty, "asc", null));
239                     //Collections.sort(childrenVOList, new ReflectionComparator(sortOrderProperty));
240

241                     Iterator JavaDoc siteNodeChildrenIterator = childrenVOList.iterator();
242                     while(siteNodeChildrenIterator.hasNext())
243                     {
244                         SiteNodeVO vo = (SiteNodeVO) siteNodeChildrenIterator.next();
245                         //System.out.println("vo:" + vo.getName());
246
}
247                 }
248             }
249             
250             Iterator JavaDoc i = childrenVOList.iterator();
251             while(i.hasNext())
252             {
253                 SiteNodeVO vo = (SiteNodeVO) i.next();
254                 
255                 BaseNode node = new SiteNodeNodeImpl();
256                 node.setId(vo.getId());
257                 node.setTitle(vo.getName());
258                 node.getParameters().put("isHidden", vo.getExtraProperties().get("isHidden"));
259                 
260                 if (vo.getIsBranch().booleanValue())
261                 {
262                     node.setContainer(true);
263                     node.setChildren((vo.getChildCount().intValue() > 0)); //
264
ret.add(node);
265                 }
266                 else
267                 {
268                     node.setContainer(false);
269                     cacheLeafs.add(node);
270                 }
271                 
272             }
273             
274             commitTransaction(db);
275         }
276         catch(Exception JavaDoc e)
277         {
278             logger.error("An error occurred so we should not complete the transaction:" + e, e);
279             rollbackTransaction(db);
280             throw new SystemException(e.getMessage());
281         }
282
283         logger.info("Getting the sitenodes for the tree took " + timer.getElapsedTime() + "ms");
284         
285         return ret;
286     }
287
288     
289     /**
290      * @see com.frovi.ss.Tree.INodeSupplier#getChildLeafNodes(Integer)
291      */

292     public Collection JavaDoc getChildLeafNodes(Integer JavaDoc parentNode)
293     {
294         return cacheLeafs;
295     }
296
297 }
298
Popular Tags