package com.idega.block.news.business; import java.sql.SQLException; import java.util.List; import java.util.Locale; import java.util.Vector; import com.idega.block.category.business.CategoryFinder; import com.idega.block.news.data.NewsCategory; import com.idega.block.news.data.NwNews; import com.idega.block.news.data.NwNewsHome; import com.idega.block.text.business.ContentFinder; import com.idega.block.text.business.ContentHelper; import com.idega.core.component.data.ICObjectInstance; import com.idega.core.localisation.business.ICLocaleBusiness; import com.idega.data.GenericEntity; import com.idega.data.IDOLookup; import com.idega.data.IDORelationshipException; import com.idega.util.IWTimestamp; /** * Title: * Description: * Copyright: Copyright (c) 2000-2001 idega.is All Rights Reserved * Company: idega *@author <a href="mailto:aron@idega.is">Aron Birkir</a> * @version 1.1 */ public class NewsFinder { public static final int PUBLISHISING = 1,UNPUBLISHED = 2, PUBLISHED = 3; public NewsFinder() { } public static NewsCategory getNewsCategory(int iCategoryId){ return (NewsCategory) CategoryFinder.getInstance().getCategory(iCategoryId); } public static List listOfAllNwNewsInCategory(int[] newsCategoryId,Locale locale){ int iLocaleId = getLocaleId(locale); return listOfPublishingNews(newsCategoryId,iLocaleId ,true); } public static List listOfNwNewsInCategory(int[] newsCategoryId,Locale locale){ int iLocaleId = getLocaleId(locale); return listOfPublishingNews(newsCategoryId,iLocaleId,false); } public static List listOfAllNwNewsInCategory(int[] newsCategoryId,int iLocaleId){ return listOfPublishingNews(newsCategoryId,iLocaleId ,true); } public static List listOfNwNewsInCategory(int[] newsCategoryId,int iLocaleId){ return listOfPublishingNews(newsCategoryId,iLocaleId,false); } public static List listOfAllNwNewsInCategory(int newsCategoryId){ return listOfPublishingNews(newsCategoryId,true); } public static List listOfNwNewsInCategory(int newsCategoryId){ return listOfPublishingNews(newsCategoryId,false); } public static List listOfPublishingNews(int newsCategoryId,boolean ignorePublishingDates){ /* Table news = new Table(com.idega.block.news.data.NwNewsBMPBean.getEntityTableName(), "n"); Table content = new Table(com.idega.block.text.data.ContentBMPBean.getEntityTableName(), "c"); SelectQuery query = new SelectQuery(news); query.addColumn(new WildCardColumn(news)); query.addColumn(new WildCardColumn(content)); query.addJoin(news, NwNewsBMPBean.getColumnNameContentId(), content, ContentBMPBean.getEntityTableName()+"_ID"); query.addCriteria(new MatchCriteria(news, NwNewsBMPBean.getColumnNameNewsCategoryId(), MatchCriteria.EQUALS, newsCategoryId)); if (!ignorePublishingDates ) { IWTimestamp today = IWTimestamp.RightNow(); MatchCriteria from = new MatchCriteria(content, ContentBMPBean.getColumnNamePublishFrom(), MatchCriteria.LESSEQUAL, today.getTimestamp()); MatchCriteria to = new MatchCriteria(content, ContentBMPBean.getColumnNamePublishTo(), MatchCriteria.GREATEREQUAL, today.getTimestamp()); query.addCriteria(new AND(from, to)); } query.addOrder(content, ContentBMPBean.getColumnNameCreated(), false); */ /*StringBuffer sql = new StringBuffer("select * from "); sql.append(com.idega.block.news.data.NwNewsBMPBean.getEntityTableName()); sql.append(" n,"); sql.append(com.idega.block.text.data.ContentBMPBean.getEntityTableName()); sql.append(" c where n."); sql.append(com.idega.block.news.data.NwNewsBMPBean.getColumnNameContentId()); sql.append(" = c."); sql.append(com.idega.block.text.data.ContentBMPBean.getEntityTableName()); sql.append("_id and "); sql.append(com.idega.block.news.data.NwNewsBMPBean.getColumnNameNewsCategoryId()); sql.append(" = "); sql.append(newsCategoryId);*/ // USE BETWEEN /* if(!ignorePublishingDates ){ IWTimestamp today = IWTimestamp.RightNow(); sql.append(" and '"); sql.append(today.toSQLString()); sql.append("' between "); sql.append(com.idega.block.text.data.ContentBMPBean.getColumnNamePublishFrom() ); sql.append(" and "); sql.append(com.idega.block.text.data.ContentBMPBean.getColumnNamePublishTo()); } */ // USE OPERATORS <= AND >= /*if(!ignorePublishingDates ){ IWTimestamp today = IWTimestamp.RightNow(); sql.append(" and "); sql.append(com.idega.block.text.data.ContentBMPBean.getColumnNamePublishFrom() ); sql.append(" <= '"); sql.append(today.toSQLString()); sql.append("' and "); sql.append(com.idega.block.text.data.ContentBMPBean.getColumnNamePublishTo()); sql.append(" >= '"); sql.append(today.toSQLString()); sql.append("' "); } sql.append(" order by "); sql.append(com.idega.block.text.data.ContentBMPBean.getColumnNamePublishFrom()); sql.append(" desc ");*/ //System.err.println(sql.toString()); try { //return EntityFinder.findAll(((com.idega.block.news.data.NwNewsHome)com.idega.data.IDOLookup.getHomeLegacy(NwNews.class)).createLegacy(),query.toString()); return new Vector(((NwNewsHome) IDOLookup.getHome(NwNews.class)).findPublishedByCategory(newsCategoryId,ignorePublishingDates)); } catch (Exception ex) { ex.printStackTrace(); } return null; } public static List listOfPublishingNews(int[] newsCategoryIds,int iLocaleId,boolean ignorePublishingDates){ /* String middleTable = ((com.idega.block.text.data.ContentHome)com.idega.data.IDOLookup.getHomeLegacy(Content.class)).createLegacy().getLocalizedTextMiddleTableName(((com.idega.block.text.data.LocalizedTextHome)com.idega.data.IDOLookup.getHomeLegacy(LocalizedText.class)).createLegacy(),((com.idega.block.text.data.ContentHome)com.idega.data.IDOLookup.getHomeLegacy(Content.class)).createLegacy()); Table news = new Table(com.idega.block.news.data.NwNewsBMPBean.getEntityTableName(), "n"); Table content = new Table(com.idega.block.text.data.ContentBMPBean.getEntityTableName(), "c"); Table text = new Table(com.idega.block.text.data.LocalizedTextBMPBean.getEntityTableName(), "t"); Table middle = new Table(middleTable, "m"); SelectQuery query = new SelectQuery(news); query.addColumn(new WildCardColumn(news)); query.addColumn(new WildCardColumn(content)); query.addJoin(news, NwNewsBMPBean.getColumnNameContentId(), content, ContentBMPBean.getEntityTableName()+"_ID"); query.addJoin(content, ContentBMPBean.getEntityTableName()+"_ID", middle, ContentBMPBean.getEntityTableName()+"_ID"); query.addJoin(content, ContentBMPBean.getEntityTableName()+"_ID", middle, ContentBMPBean.getEntityTableName()+"_ID"); query.addJoin(middle, LocalizedTextBMPBean.getEntityTableName()+"_ID", text, LocalizedTextBMPBean.getEntityTableName()+"_ID"); query.addCriteria(new InCriteria(news, NwNewsBMPBean.getColumnNameNewsCategoryId(), newsCategoryIds)); query.addCriteria(new MatchCriteria(text, LocalizedTextBMPBean.getColumnNameLocaleId(), MatchCriteria.EQUALS, iLocaleId)); if (!ignorePublishingDates ) { IWTimestamp today = IWTimestamp.RightNow(); MatchCriteria from = new MatchCriteria(content, ContentBMPBean.getColumnNamePublishFrom(), MatchCriteria.LESSEQUAL, today.getTimestamp()); MatchCriteria to = new MatchCriteria(content, ContentBMPBean.getColumnNamePublishTo(), MatchCriteria.GREATEREQUAL, today.getTimestamp()); query.addCriteria(new AND(from, to)); } query.addOrder(content, ContentBMPBean.getColumnNameCreated(), false); */ /*StringBuffer sql = new StringBuffer("SELECT N.*,C.* FROM "); sql.append(com.idega.block.news.data.NwNewsBMPBean.getEntityTableName()); sql.append(" N, "); sql.append(com.idega.block.text.data.LocalizedTextBMPBean.getEntityTableName()); sql.append(" T, "); sql.append(middleTable); sql.append(" M, "); sql.append(com.idega.block.text.data.ContentBMPBean.getEntityTableName()); sql.append(" C "); sql.append("WHERE N."); sql.append(com.idega.block.news.data.NwNewsBMPBean.getColumnNameContentId()); sql.append(" = C."); sql.append(com.idega.block.text.data.ContentBMPBean.getEntityTableName()); sql.append("_ID AND "); sql.append(com.idega.block.news.data.NwNewsBMPBean.getColumnNameNewsCategoryId()); sql.append(" in ("); for (int i = 0; i < newsCategoryIds.length; i++) { if(i>0) sql.append(","); sql.append(newsCategoryIds[i]); } sql.append(" ) "); //sql.append(" = "); //sql.append(newsCategoryId); sql.append(" AND C."); sql.append(com.idega.block.text.data.ContentBMPBean.getEntityTableName()); sql.append("_ID = M."); sql.append(com.idega.block.text.data.ContentBMPBean.getEntityTableName()); sql.append("_ID AND M."); sql.append(com.idega.block.text.data.LocalizedTextBMPBean.getEntityTableName()); sql.append("_ID = T."); sql.append(com.idega.block.text.data.LocalizedTextBMPBean.getEntityTableName()); sql.append("_ID AND T."); sql.append(com.idega.block.text.data.LocalizedTextBMPBean.getColumnNameLocaleId()); sql.append(" = "); sql.append(iLocaleId); // USE BETWEEN /* if(!ignorePublishingDates ){ IWTimestamp today = IWTimestamp.RightNow(); sql.append(" and '"); sql.append(today.toSQLString()); sql.append("' between "); sql.append(com.idega.block.text.data.ContentBMPBean.getColumnNamePublishFrom() ); sql.append(" and "); sql.append(com.idega.block.text.data.ContentBMPBean.getColumnNamePublishTo()); } */ // USE OPERATORS <= AND >= /*if(!ignorePublishingDates ){ IWTimestamp today = IWTimestamp.RightNow(); sql.append(" and "); sql.append(com.idega.block.text.data.ContentBMPBean.getColumnNamePublishFrom() ); sql.append(" <= '"); sql.append(today.toSQLString()); sql.append("' and "); sql.append(com.idega.block.text.data.ContentBMPBean.getColumnNamePublishTo()); sql.append(" >= '"); sql.append(today.toSQLString()); sql.append("' "); } sql.append(" order by C."); sql.append(com.idega.block.text.data.ContentBMPBean.getColumnNameCreated()); sql.append(" desc ");*/ // //System.err.println(sql.toString()); try { //return EntityFinder.findAll(((com.idega.block.news.data.NwNewsHome)com.idega.data.IDOLookup.getHomeLegacy(NwNews.class)).createLegacy(),query.toString()); return new Vector(((NwNewsHome)IDOLookup.getHome(NwNews.class)).findPublishedByCategoriesAndLocale(newsCategoryIds,iLocaleId,ignorePublishingDates)); } catch (Exception ex) { ex.printStackTrace(); } return null; } public static List listOfNewsHelpersInCategory(int newsCategoryId,int maxNumberOfNews){ List L = listOfNwNewsInCategory(newsCategoryId); if(L!= null){ int len = L.size(); Vector V = new Vector(); for (int i = 0; i < len && i < maxNumberOfNews; i++) { NwNews news = (NwNews) L.get(i); NewsHelper nh = getNewsHelper(news); if(nh != null) { V.add(nh); } } return V; } return null; } public static List listOfNewsHelpersInCategory(int[] newsCategoryId,int maxNumberOfNews,Locale locale){ return listOfNewsHelpersInCategory(newsCategoryId,maxNumberOfNews,getLocaleId(locale)); } public static List listOfAllNewsHelpersInCategory(int[] newsCategoryId,int maxNumberOfNews,Locale locale){ int iLocaleId = getLocaleId(locale); List L = listOfAllNwNewsInCategory(newsCategoryId ,iLocaleId); return listOfNewsHelpersInCategory(L,newsCategoryId ,maxNumberOfNews , iLocaleId); } public static List listOfNewsHelpersInCategory(int[] newsCategoryId,int maxNumberOfNews,int iLocaleId){ List L = listOfNwNewsInCategory(newsCategoryId,iLocaleId); return listOfNewsHelpersInCategory(L,newsCategoryId ,maxNumberOfNews ,iLocaleId ); } private static List listOfNewsHelpersInCategory(List L,int[] newsCategoryId,int maxNumberOfNews,int iLocaleId){ if(L!= null){ int len = L.size(); Vector V = new Vector(); for (int i = 0; i < len && i < maxNumberOfNews; i++) { NwNews news = (NwNews) L.get(i); NewsHelper nh = getNewsHelper(news,iLocaleId ); if(nh != null) { V.add(nh); } } return V; } return null; } public static NewsHelper getNewsHelper(NwNews news){ NewsHelper NH = new NewsHelper(); NwNews N = news; if(N!=null){ ContentHelper ch = ContentFinder.getContentHelper(N.getContentId()); NH.setNews(N); NH.setContentHelper(ch); return NH; } else { return null; } } public static NewsHelper getNewsHelper(NwNews news,int iLocaleId){ NewsHelper NH = new NewsHelper(); NwNews N = news; if(N!=null){ ContentHelper ch = ContentFinder.getContentHelper(N.getContentId(),iLocaleId ); NH.setNews(N); NH.setContentHelper(ch); return NH; } else { return null; } } public static NewsHelper getNewsHelper(int iNwNewsId){ NwNews N = getNews(iNwNewsId); return getNewsHelper(N); } public static NewsHelper getNewsHelper(int iNwNewsId,int iLocaleId){ NwNews N = getNews(iNwNewsId); return getNewsHelper(N,iLocaleId ); } public static NewsHelper getNewsHelper(int iNwNewsId,Locale locale){ NewsHelper NH = new NewsHelper(); NwNews N = getNews(iNwNewsId); if(N!=null){ ContentHelper ch = ContentFinder.getContentHelper(N.getContentId(),locale ); NH.setNews(N); NH.setContentHelper(ch); return NH; } else { return null; } } public static List listOfNewsFiles(int id){ try { return listOfNewsFiles(((com.idega.block.news.data.NwNewsHome)com.idega.data.IDOLookup.getHomeLegacy(NwNews.class)).findByPrimaryKeyLegacy(id)); } catch (SQLException ex) { } return null; } public static List listOfNewsFiles(NwNews nwNews){ try { return (List)nwNews.getRelatedFiles(); } catch (IDORelationshipException e) { e.printStackTrace(); } return null; } public static List listOfLocalizedText(int iNwNewsId){ List L = null; try { //NwNews tt = ((com.idega.block.news.data.NwNewsHome)com.idega.data.IDOLookup.getHomeLegacy(NwNews.class)).findByPrimaryKeyLegacy(iNwNewsId); //LocalizedText lt = ((com.idega.block.text.data.LocalizedTextHome)com.idega.data.IDOLookup.getHomeLegacy(LocalizedText.class)).createLegacy(); //L = EntityFinder.findRelated(tt,lt); NwNews news = ((NwNewsHome)IDOLookup.getHome(NwNews.class)).findByPrimaryKey(new Integer(iNwNewsId)); return new Vector(news.getLocalizedTexts()); } catch (Exception ex) { ex.printStackTrace(); L = null; } return L; } public static NwNews getNews(int iNewsId){ try { return ((com.idega.block.news.data.NwNewsHome)com.idega.data.IDOLookup.getHomeLegacy(NwNews.class)).findByPrimaryKeyLegacy(iNewsId); } catch (SQLException ex) { ex.printStackTrace(); return null; } } public static int countNewsInCategory(int iCategoryId){ try { NwNews news = (NwNews)GenericEntity.getStaticInstance(NwNews.class); return news.getNumberOfRecords(com.idega.block.news.data.NwNewsBMPBean.getColumnNameNewsCategoryId(),iCategoryId); } catch (SQLException ex) { ex.printStackTrace(); } return 0; } public static int countNewsInCategory(int iCategoryId, int PublishType){ StringBuffer sql = new StringBuffer("select count(*) from "); sql.append(com.idega.block.news.data.NwNewsBMPBean.getEntityTableName()); sql.append(" n,"); sql.append(com.idega.block.text.data.ContentBMPBean.getEntityTableName()); sql.append(" c where n."); sql.append(com.idega.block.news.data.NwNewsBMPBean.getColumnNameContentId()); sql.append(" = c."); sql.append(com.idega.block.text.data.ContentBMPBean.getEntityTableName()); sql.append("_id and "); sql.append(com.idega.block.news.data.NwNewsBMPBean.getColumnNameNewsCategoryId()); sql.append(" = "); sql.append(iCategoryId); if(PublishType > 0){ String today = IWTimestamp.RightNow().toSQLString(); switch (PublishType) { case UNPUBLISHED : sql.append(" and c."); sql.append(com.idega.block.text.data.ContentBMPBean.getColumnNamePublishFrom() ); sql.append(" >= '"); sql.append(today); sql.append("' "); break; case PUBLISHISING: sql.append(" and c."); sql.append(com.idega.block.text.data.ContentBMPBean.getColumnNamePublishFrom() ); sql.append(" <= '"); sql.append(today); sql.append("' and c."); sql.append(com.idega.block.text.data.ContentBMPBean.getColumnNamePublishTo()); sql.append(" >= '"); sql.append(today); sql.append("' "); break; case PUBLISHED: sql.append(" and c."); sql.append(com.idega.block.text.data.ContentBMPBean.getColumnNamePublishTo()); sql.append(" <= '"); sql.append(today); sql.append("' "); break; } } NwNews ge = (NwNews)GenericEntity.getStaticInstance(NwNews.class); try { //System.err.println(sql.toString()); return ge.getIntTableValue(sql.toString()); } catch (SQLException ex) { } return 0; } public static List listOfLocales(){ return ICLocaleBusiness.listLocaleCreateIsEn(); } public static int getLocaleId(Locale locale){ return ICLocaleBusiness.getLocaleId(locale); } public static Locale getLocale(int iLocaleId){ Locale L = ICLocaleBusiness.getLocale(iLocaleId); if(L==null) { L = new Locale("is","IS"); } return L; } public static List listOfNewsCategories(){ return CategoryFinder.getInstance().listOfCategories(((com.idega.block.news.data.NewsCategoryHome)com.idega.data.IDOLookup.getHomeLegacy(NewsCategory.class)).createLegacy().getCategoryType()); } public static List listOfValidNewsCategories(){ return CategoryFinder.getInstance().listOfValidCategories(((com.idega.block.news.data.NewsCategoryHome)com.idega.data.IDOLookup.getHomeLegacy(NewsCategory.class)).createLegacy().getCategoryType()); } public static List listOfInValidNewsCategories(){ return CategoryFinder.getInstance().listOfInValidCategories(((com.idega.block.news.data.NewsCategoryHome)com.idega.data.IDOLookup.getHomeLegacy(NewsCategory.class)).createLegacy().getCategoryType()); } public static int getObjectInstanceIdFromNewsCategoryId(int iCategoryId){ return CategoryFinder.getInstance().getObjectInstanceIdFromCategoryId(iCategoryId); } public static int getObjectInstanceCategoryId(int iObjectInstanceId,boolean CreateNew){ return CategoryFinder.getInstance().getObjectInstanceCategoryId(iObjectInstanceId,CreateNew,((com.idega.block.news.data.NewsCategoryHome)com.idega.data.IDOLookup.getHomeLegacy(NewsCategory.class)).createLegacy().getCategoryType()); } public static int getObjectInstanceCategoryId(int iObjectInstanceId){ return CategoryFinder.getInstance().getObjectInstanceCategoryId(iObjectInstanceId); } public static int getObjectInstanceCategoryId(ICObjectInstance eObjectInstance){ return CategoryFinder.getInstance().getObjectInstanceCategoryId(eObjectInstance); } public static List listOfNewsCategoryForObjectInstanceId(int instanceid){ return CategoryFinder.getInstance().listOfCategoryForObjectInstanceId(instanceid); } public static List listOfNewsCategoryForObjectInstanceId( ICObjectInstance obj){ return CategoryFinder.getInstance().listOfCategoryForObjectInstanceId(obj); } }