package com.idega.block.news.presentation; import com.idega.idegaweb.block.presentation.Builderaware; /** * 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 News extends NewsReader implements Builderaware{ /* private final static String IW_BUNDLE_IDENTIFIER="com.idega.block.news"; private boolean isAdmin=false; private int iCategoryId = -1; private String attributeName = null; private int attributeId = -1; private User eUser = null; private boolean showNewsCollectionButton=true; private int categoryId = 0; private Table outerTable = new Table(1,1); private int numberOfLetters = 273; private int numberOfDisplayedNews = 5; private int numberOfExpandedNews = 3; private int iSpaceBetween = 1; private boolean backbutton = false; private boolean showAll = false; private boolean showImages = true; private boolean showOnlyDates = false; private boolean headlineAsLink = false; private boolean showHeadlineImage = false; private boolean showMoreButton = false; private boolean alignWithHeadline = false; private boolean limitNumberOfNews = false; private boolean enableDelete=true; private String date = null; private String newsReaderURL; private String newsCollectionURL; private String selectFrom = "select nw_news.* from nw_news where "; private String orderBy = " order by news_date DESC"; private String sNewsCategoryId = "nw_news_cat_id ='"; private String sNewsEditorUrl ="/news/editor.jsp"; private String headlineImageURL = "/pics/jmodules/news/nanar2.gif"; private static String prmDelete = "nwr.delete"; private static String prmEdit = "nwr.edit"; private static String prmNew = "nwr.new"; private static String prmMore = "nwr.more"; public static String prmNewsCategoryId = "nwr.newscategoryid"; private boolean newobjinst = false; private Hashtable objectsBetween = null; private String sObjectAlign = "center"; private Text textProxy = new Text(); private Text headlineProxy = new Text(); private Text informationProxy = new Text(); private String outerTableWidth = "100%"; private int textSize = 2; private IWBundle iwb; private IWResourceBundle iwrb ; public static final int SINGLE_FILE_LAYOUT = 1; public static final int NEWS_SITE_LAYOUT = 2; public static final int NEWS_PAPER_LAYOUT = 3; private int iLayout =1; */ public News(){ super();/* init(); showAll = true; */ } public News(int iCategoryId){ super(iCategoryId ); /* this(); this.iCategoryId=iCategoryId; this.showAll = false; */ } /* private void init(){ headlineProxy.setBold(); informationProxy.setFontColor("#666666"); textProxy.setFontSize(1); informationProxy.setFontSize(1); } private void checkCategories(){ } private void control(IWContext iwc){ Locale locale = iwc.getCurrentLocale(); String sNewsId = iwc.getParameter(prmMore); NewsCategory newsCategory = null; if(iCategoryId <= 0){ String sCategoryId = iwc.getParameter(prmNewsCategoryId ); if(sCategoryId != null) iCategoryId = Integer.parseInt(sCategoryId); else if(getICObjectInstanceID() > 0){ iCategoryId = NewsFinder.getObjectInstanceCategoryId(getICObjectInstanceID()); if(iCategoryId <= 0 ){ newobjinst = true; } } } Table T = new Table(1,1); T.setCellpadding(0); T.setCellpadding(0); T.setWidth( "100%"); if(isAdmin){ T.add(getAdminPart(iCategoryId,false,newobjinst),1,1); } if(iCategoryId >0){ newsCategory = NewsFinder.getNewsCategory(iCategoryId); if(newsCategory != null){ if(sNewsId != null){ int id = Integer.parseInt(sNewsId); NewsHelper nh = NewsFinder.getNewsHelper(id); T.add(getNewsTable(nh,newsCategory,locale,true),1,1); } else T.add(publishNews(iwc,newsCategory,locale),1,1); } } else{ T.add(new Text(iwrb.getLocalizedString("no_news_category","No news category"))); showCategoryMaker(); } super.add(T); } public PresentationObject getAdminPart(int iCategoryId,boolean enableDelete,boolean newObjInst){ Table T = new Table(3,1); T.setCellpadding(2); T.setCellspacing(2); T.setBorder(0); if(iCategoryId > 0){ Link ne = new Link(iwrb.getImage("newseditor.gif")); ne.setWindowToOpen(NewsEditorWindow.class,this.getICObjectInstanceID()); ne.addParameter(NewsEditorWindow.prmCategory,iCategoryId); T.add(ne,1,1); Link change = new Link(iwrb.getImage("change.gif")); change.setWindowToOpen(NewsEditorWindow.class,this.getICObjectInstanceID()); change.addParameter(NewsEditorWindow.prmCategory,iCategoryId); change.addParameter(NewsEditorWindow.prmObjInstId,getICObjectInstanceID()); T.add(change,2,1); if ( enableDelete ) { Link delete = new Link(iwrb.getImage("delete.gif")); delete.setWindowToOpen(NewsEditorWindow.class,this.getICObjectInstanceID()); delete.addParameter(NewsEditorWindow.prmDelete,iCategoryId); T.add(delete,3,1); } } if(newObjInst){ Link newLink = new Link(iwrb.getImage("new.gif")); newLink.setWindowToOpen(NewsEditorWindow.class,this.getICObjectInstanceID()); if(newObjInst) newLink.addParameter(NewsEditorWindow.prmObjInstId,getICObjectInstanceID()); T.add(newLink,2,1); } T.setWidth("100%"); return T; } private PresentationObject publishNews(IWContext iwc ,NewsCategory newsCategory,Locale locale){ List L = NewsFinder.listOfNewsHelpersInCategory(newsCategory.getID(),numberOfDisplayedNews,locale ); NewsTable T = new NewsTable(NewsTable.NEWS_SITE_LAYOUT ); boolean useDividedTable = iLayout == NEWS_SITE_LAYOUT ? true:false; if(L!=null){ int len = L.size(); Integer I; NewsHelper newsHelper; for (int i = 0; i < len; i++) { newsHelper = (NewsHelper) L.get(i); I = new Integer(i); if(objectsBetween != null && objectsBetween.containsKey(I)){ Table t = new Table(1,1); t.setCellpadding(4); t.add((PresentationObject)objectsBetween.get(I)); T.add(t,sObjectAlign ); objectsBetween.remove(I); } T.add(getNewsTable(newsHelper,newsCategory,locale ,false),useDividedTable,"left"); } if(objectsBetween != null && objectsBetween.size() > 0){ Vector V = new Vector(objectsBetween.values()); Collections.reverse(V); Iterator iter = V.iterator(); while(iter.hasNext()){ T.add((PresentationObject)iter.next(),sObjectAlign ); } } } else{ T.add(new Text(iwrb.getLocalizedString("no_news","No News"))); } return(T); } // Make a table around each news private PresentationObject getNewsTable(NewsHelper newsHelper,NewsCategory newsCategory, Locale locale,boolean showAll){ Table T = new Table(1,4); T.setCellpadding(0); T.setCellspacing(0); T.setBorder(0); T.setWidth("100%"); NwNews news = newsHelper.getNwNews(); LocalizedText locText = newsHelper.getLocalizedText(locale); Text newsInfo = getInfoText(news,newsCategory.getName(),locale,showOnlyDates); String sNewsBody = ""; String sHeadline = ""; if(locText!=null){ sHeadline = locText.getHeadline(); sNewsBody = locText.getBody(); } else{ if(news.getHeadline()!=null){ sHeadline = news.getHeadline(); } if(news.getText()!=null){ sNewsBody = NewsFormatter.formatNews(news.getText(),"2"); } } // shortening newstext if(!showAll && sNewsBody.length() >= numberOfLetters){ sNewsBody=sNewsBody.substring(0,numberOfLetters)+"..."; } Text headLine = new Text(sHeadline); Text newsBody = new Text(sNewsBody); if( showAll ) { T.add(new BackButton(iwrb.getImage("back.gif")), 1, 4); } newsInfo = setInformationAttributes(newsInfo); headLine = setHeadlineAttributes(headLine); newsBody = setTextAttributes(newsBody); T.add(newsInfo,1,1); if (news.getImageId()!= -1 && showImages && news.getIncludeImage()){ try{ Table imageTable = new Table(1, 2); Image newsImage = new Image(news.getImageId()); newsImage.setAlignment("right"); //imageTable.setAlignment("right"); //imageTable.setVerticalAlignment("top"); //imageTable.add(newsImage, 1, 1); T.add(newsImage,1,3); } catch(SQLException ex){ ex.printStackTrace(); } } T.add(newsBody,1,3); // add news if(!showAll && showMoreButton){ Link moreLink = new Link(iwrb.getImage("more.gif")); moreLink.addParameter(prmMore,news.getID()); T.add(moreLink, 1, 4); } if ( alignWithHeadline && headlineImageURL!=null){ T.add(new Image(headlineImageURL), 1, 2); } if ( headlineAsLink ) { Link headlineLink = new Link(headLine); headlineLink.addParameter(prmMore,news.getID()); T.add(headlineLink, 1, 2); } else { T.add(headLine, 1, 2); } if(isAdmin){ T.add(getNewsAdminPart(news),1,4); } return T; } private PresentationObject getNewsAdminPart(NwNews news){ Table links = new Table(2,1); Link newsEdit = new Link(iwrb.getImage("change.gif")); newsEdit.setWindowToOpen(NewsEditorWindow.class,this.getICObjectInstanceID()); newsEdit.addParameter(NewsEditorWindow.prmNwNewsId,news.getID()); Link newsDelete = new Link(iwrb.getImage("delete.gif")); newsDelete.setWindowToOpen(NewsEditorWindow.class,this.getICObjectInstanceID()); newsDelete.addParameter(NewsEditorWindow.prmDelete,news.getID()); links.setAlignment(1,1,"left"); links.setAlignment(2,1,"right"); links.add(newsEdit,2,1); links.add(newsDelete,1,1); return links; } private Text getInfoText(NwNews nwNews,String sCategoryName,Locale locale, boolean ifUseOnlyDates){ return new Text(NewsFormatter.getInfoText(nwNews,sCategoryName,locale,ifUseOnlyDates) ); } private void showCategoryMaker(){ } public void main(IWContext iwc)throws Exception{ try { //isAdmin = AccessControl.isAdmin(iwc); /** @todo *//* isAdmin = iwc.getAccessController().hasEditPermission(this,iwc); } catch (SQLException ex) { isAdmin = false; } iwb = getBundle(iwc); iwrb = getResourceBundle(iwc); control(iwc); } public boolean deleteBlock(int instanceid){ return NewsBusiness.disconnectBlock(instanceid); } public void setConnectionAttributes(String attributeName, int attributeId) { this.attributeName = attributeName; this.attributeId = attributeId; } public void setConnectionAttributes(String attributeName, String attributeId) { this.attributeName = attributeName; this.attributeId = Integer.parseInt(attributeId); } public void setNumberOfDays( int daysIn ){ IWTimestamp stamp= IWTimestamp.RightNow(); stamp.addDays(-daysIn);//dagar inni this.date= stamp.toSQLString(); } /* ** This method uses static layouts from this class ** *//* public void setLayout(int LAYOUT){ this.iLayout = LAYOUT; } /** * * return a proxy for the main text. Use the standard * set methods on this object such as .setFontSize(1) etc. * and it will set the property for all texts. *//* public Text getTextProxy(){ return textProxy; } public Text getHeadlineProxy(){ return headlineProxy; } public Text getInformationProxy(){ return informationProxy; } public void setTextProxy(Text textProxy){ this.textProxy = textProxy; } public void setHeadlineProxy(Text headlineProxy){ this.headlineProxy = headlineProxy; } public void setInformationProxy(Text informationProxy){ this.informationProxy = informationProxy; } public Text setTextAttributes( Text realText ){ Text tempText = (Text) textProxy.clone(); tempText.setText( realText.getText() ); return tempText; } public Text setHeadlineAttributes( Text realText ){ Text tempText = (Text) headlineProxy.clone(); tempText.setText( realText.getText() ); return tempText; } public Text setInformationAttributes( Text realText ){ Text tempText = (Text) informationProxy.clone(); tempText.setText( realText.getText() ); return tempText; } public void setNumberOfLetters(int numberOfLetters){ this.numberOfLetters = Math.abs(numberOfLetters); } //debug this changes the number of news displayed..that is the date alone is failing public void setNumberOfDisplayedNews(int numberOfDisplayedNews){ this.limitNumberOfNews = true; this.numberOfDisplayedNews = Math.abs(numberOfDisplayedNews); } public void setAdmin(boolean isAdmin){ this.isAdmin=isAdmin; } public void setFromDate(String SQLdate){ this.date=SQLdate; } public void setWidth(int width){ setWidth(Integer.toString(width)); } public void setWidth(String width){ this.outerTableWidth = width; } public void setNewsReaderURL(String URL){ this.newsReaderURL = URL; } public String getNewsReaderURL(){ return newsReaderURL; } public void setNewsCollectionURL(String URL){ this.newsCollectionURL = URL; } public String getNewsCollectionURL(){ return newsCollectionURL; } public void showNewsCollectionButton(boolean showNewsCollectionButton){ this.showNewsCollectionButton = showNewsCollectionButton; } public void setNewsReaderURLAsSamePage(IWContext iwc){ this.newsReaderURL = iwc.getRequestURI(); } public void setNewsCollectionURLAsSamePage(IWContext iwc){ this.newsCollectionURL = iwc.getRequestURI(); } public void setNumberOfExpandedNews(int numberOfExpandedNews){ this.numberOfExpandedNews = Math.abs(numberOfExpandedNews); } public void setShowImages(boolean showImages) { this.showImages=showImages; } public void setShowMoreButton(boolean showMoreButton) { this.showMoreButton=showMoreButton; } public void setShowHeadlineImage(boolean showHeadlineImage) { this.showHeadlineImage=showHeadlineImage; } public void alignImageWithHeadline() { this.alignWithHeadline=true; } public void setHeadlineAsLink(boolean headlineAsLink) { this.headlineAsLink=headlineAsLink; this.showHeadlineImage=true; this.showMoreButton=false; } public void setHeadlineImageURL(String headlineImageURL) { this.headlineImageURL=headlineImageURL; } public void setShowOnlyDates(boolean showOnlyDates) { this.showOnlyDates=showOnlyDates; } public String getBundleIdentifier(){ return IW_BUNDLE_IDENTIFIER; } public String getObjectAlignment(){ return sObjectAlign ; } public void setObjectAligment(String sAlign){ sObjectAlign = sAlign; } public void addObjectBetween(PresentationObject object,int spaceNumber){ if(objectsBetween == null) objectsBetween = new Hashtable(); objectsBetween.put(new Integer(spaceNumber),object); } // overriding super class method public void add(PresentationObject MO){ addObjectBetween(MO,iSpaceBetween); if(iLayout == NEWS_SITE_LAYOUT){ iSpaceBetween+=2; } else iSpaceBetween++; }*/ }