1 23 24 package org.infoglue.cms.treeservice.ss; 25 26 import java.util.ArrayList ; 27 import java.util.Collection ; 28 import java.util.Collections ; 29 import java.util.Iterator ; 30 import java.util.List ; 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 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 cacheLeafs; 74 75 76 public SiteNodeNodeSupplier(Integer 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 100 public boolean hasChildren() 101 { 102 return false; 103 } 104 105 108 163 166 public Collection getChildContainerNodes(Integer parentNode) throws SystemException, Exception 167 { 168 Timer timer = new Timer(); 169 170 Database db = CastorDatabaseService.getDatabase(); 171 ConstraintExceptionBuffer ceb = new ConstraintExceptionBuffer(); 172 173 ArrayList ret = new ArrayList (); 174 cacheLeafs = new ArrayList (); 175 177 String sortProperty = CmsPropertyHandler.getStructureTreeSort(); 178 String isHiddenProperty = CmsPropertyHandler.getStructureTreeIsHiddenProperty(); 179 180 beginTransaction(db); 181 182 try 183 { 184 SiteNode parentSiteNode = SiteNodeController.getSiteNodeWithId(parentNode, db, true); 185 Collection children = parentSiteNode.getChildSiteNodes(); 186 List childrenVOList = SiteNodeController.toVOList(children); 187 188 Iterator 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 [] sortOrders = sortProperty.split(","); 202 for(int i=sortOrders.length - 1; i > -1; i--) 203 { 204 String sortOrderProperty = sortOrders[i].trim(); 205 207 if(contentVersion != null && sortOrderProperty.startsWith("extra:")) 208 { 209 sortOrderProperty = sortOrderProperty.substring(6); 210 String propertyValue = ContentVersionController.getContentVersionController().getAttributeValue(contentVersion.getValueObject(), sortOrderProperty, false); 211 siteNodeVO.getExtraProperties().put(sortOrderProperty, propertyValue); 212 213 if(isHiddenProperty != null && !isHiddenProperty.equals("")) 214 { 215 String 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 if(sortProperty != null) 229 { 230 String [] sortOrders = sortProperty.split(","); 231 for(int i=sortOrders.length - 1; i > -1; i--) 232 { 233 String sortOrderProperty = sortOrders[i].trim(); 234 if(sortOrderProperty.startsWith("extra:")) 236 sortOrderProperty = sortOrderProperty.substring(6); 237 238 Collections.sort(childrenVOList, new SiteNodeComparator(sortOrderProperty, "asc", null)); 239 241 Iterator siteNodeChildrenIterator = childrenVOList.iterator(); 242 while(siteNodeChildrenIterator.hasNext()) 243 { 244 SiteNodeVO vo = (SiteNodeVO) siteNodeChildrenIterator.next(); 245 } 247 } 248 } 249 250 Iterator 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)); 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 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 292 public Collection getChildLeafNodes(Integer parentNode) 293 { 294 return cacheLeafs; 295 } 296 297 } 298 | Popular Tags |