//idega 2001 - Tryggvi Larusson /* *Copyright 2001 idega.is All Rights Reserved. */ package com.idega.presentation; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import com.idega.idegaweb.IWURL; import com.idega.presentation.ui.Window; /** *@author <a href="mailto:tryggvi@idega.is">Tryggvi Larusson</a> *@version 1.2 */ public class FrameSet extends Window{ private int alignment; private int numberOfFrames=0; private boolean isInAWindow = false; private static final int ALIGNMENT_VERTICAL=1; private static final int ALIGNMENT_HORIZONTAL=2; private static final String COLS_PROPERTY="cols"; private static final String CLASS_PROPERTY="iw_frameset_class"; private static final String SOURCE_PROPERTY="src"; private static final String star = "*"; private static final String PERCENTSIGN = "%"; private Map framesMap; public FrameSet(){ setFrameBorder(0); setBorder(0); setFrameSpacing(0); setVertical(); } public void add(String frameURL){ this.numberOfFrames++; setPage(this.numberOfFrames, frameURL); } public void add(Class pageClass){ this.numberOfFrames++; setPage(this.numberOfFrames, pageClass); } public void add(Class pageClass, String frameName ){ this.numberOfFrames++; setPage(this.numberOfFrames, pageClass); this.setFrameName(this.numberOfFrames, frameName); } private void setPage(int frameIndex, Class pageClass){ this.getFramesMap().put(new Integer(frameIndex),new HashMap()); this.getFramesPropertyMap(frameIndex).put(CLASS_PROPERTY,pageClass); } private void setPage(Class pageClass){ this.numberOfFrames++; this.getFramesMap().put(new Integer(this.numberOfFrames),new HashMap()); this.getFramesPropertyMap(this.numberOfFrames).put(CLASS_PROPERTY,pageClass); } private void setPage(int frameIndex, String url){ this.getFramesMap().put(new Integer(frameIndex),new HashMap()); setFrameSource(frameIndex,url); } private void setPage(String url){ this.numberOfFrames++; this.getFramesMap().put(new Integer(this.numberOfFrames),new HashMap()); setFrameSource(this.numberOfFrames,url); } public Class getClass(int frameIndex){ return (Class)getFramesPropertyMap(frameIndex).get(CLASS_PROPERTY); } /** * Does nothing */ protected void add(int index,PresentationObject modObject) { } /** * Does nothing */ public void add(PresentationObject modObject) { } /** * Does nothing */ public void add(Object presentationObject) { } /** * Does nothing */ public void addAtBeginning(PresentationObject modObject) { } /* // //adds the Object to the First Page; // public void add(PresentationObject obj){ if(obj instanceof Page){ add((Page)obj); } else{ getFirstFrame().add(obj); } } public void add(Page page){ numberOfFrames += 1; super.add(numberOfFrames-1,page); setFrameName(numberOfFrames,page.getID()); setAllMargins(numberOfFrames,0); } // // adds the Object to the First Page; // public void add(String string){ getFirstFrame().add(string); } */ /*private Map getClassesMap(){ if(classesMap==null){ classesMap = new Hashtable(); } return classesMap; }*/ private Map getFramesMap(){ if(this.framesMap==null){ this.framesMap = new HashMap(); } return this.framesMap; } /*private Map getFramesPropertyMap(Class c){ return (Map) getPagesMap().get(c); }*/ private Map getFramesPropertyMap(int frameIndex){ //Class c = (Class)this.getIndexesMap().get(Integer.toString(frameIndex)); //return getFramesPropertyMap(c); return (Map) getFramesMap().get(new Integer(frameIndex)); } protected void setFrameSetProperty(String name,String value){ setMarkupAttribute(name,value); } protected String getFrameSetPropertiesString(){ return getMarkupAttributesString(); } public void _main(IWContext iwc)throws Exception{ this.isInAWindow = isChildOfOtherPage(); if( this.isInAWindow ){ this.getParentPage().setAddBody(false); } super._main(iwc); this.adaptFrames(iwc); } private void adaptFrames(IWContext iwc){ if(this.numberOfFrames==1){ add(com.idega.presentation.Page.class); setSpanPercent(1,100); setSpanAdaptive(2); } setSpanAttribute(); int i = 1; while (i<=this.numberOfFrames) { Class item = this.getClass(i); if(item!=null){ setFrameSource(i,getFrameURI(item,iwc)); } i++; } } public void print(IWContext iwc) throws Exception{ //goneThroughMain = false; printBegin(iwc); printEnd(iwc); } public void printBegin(IWContext iwc){ StringBuffer buf = new StringBuffer(); if( !this.isInAWindow ){ String characterEncoding = iwc.getApplicationSettings().getCharacterEncoding(); String markup = getMarkupLanguageForPage(); String docType = getDocType(); buf.append(getStartTag(iwc.getCurrentLocale(), docType, characterEncoding)); buf.append(getMetaInformation(markup, characterEncoding)); buf.append("<title>"+getTitle()+"</title>"); } buf.append("\n<frameset "); buf.append(getFrameSetPropertiesString()); buf.append(" >\n"); print(buf.toString()); } public void printEnd(IWContext iwc){ StringBuffer buf = new StringBuffer(); int counter = 1; while(counter<=this.numberOfFrames){ buf.append("<frame "); buf.append(getFramePropertiesString(counter)); buf.append(" >\n"); counter++; } buf.append("\n</frameset>\n"); if( !this.isInAWindow ){ buf.append(getEndTag()); } //System.out.println("FrameSet - in print()\n"+ buf.toString()); print(buf.toString()); } /*private String getFrameURI(Page page,IWContext iwc){ String uri = iwc.getRequestURI()+"?"+this.IW_FRAME_STORAGE_PARMETER+"="+page.getID(); return uri; }*/ private static String getFrameURI(Class pageClass,IWContext iwc){ //String uri = iwc.getRequestURI()+"?"+IW_FRAME_CLASS_PARAMETER+"="+IWMainApplication.getEncryptedClassName(pageClass); String uri = iwc.getIWMainApplication().getWindowOpenerURI(pageClass); return uri; } public static IWURL getFrameURL(Class pageClass,IWContext iwc){ /*String uri = getFrameURI(pageClass,iwc); IWURL url = new IWURL(uri); return url; */ return new IWURL(iwc.getIWMainApplication().getWindowOpenerURI(pageClass)); } /*public static IWURL getFrameURL(Class pageClass){ String baseURL = IWConstants.SERVLET_WINDOWOPENER_URL; IWURL url = new IWURL(baseURL); url.addPageClassParameter(pageClass); return url; }*/ public void setFrameBorder(int width){ setFrameSetProperty("frameborder",Integer.toString(width)); } public void setBorder(int width){ setFrameSetProperty("border",Integer.toString(width)); } public void setFrameSpacing(int width){ setFrameSetProperty("framespacing",Integer.toString(width)); } public void setVertical(){ this.alignment=ALIGNMENT_VERTICAL; }; public void setHorizontal(){ this.alignment=ALIGNMENT_HORIZONTAL; }; /** * Sets the span (in percent) for each of the Frame Objects. frameIndex starts at 1. */ public void setSpanPercent(int frameIndex,int percent){ setFrameProperty(frameIndex,ROWS_PROPERTY,Integer.toString(percent)+PERCENTSIGN); } /** * Sets the span (in pixels) for each of the Frame Objects. frameIndex starts at 1. */ public void setSpanPixels(int frameIndex,int pixels){ setFrameProperty(frameIndex,ROWS_PROPERTY,Integer.toString(pixels)); } /** * Sets the span (in pixels) for each of the Frame Objects. frameIndex starts at 1. */ public void setSpanAdaptive(int frameIndex){ setFrameProperty(frameIndex,ROWS_PROPERTY,star); } private String getSpan(int frameIndex){ String frameProperty = getFrameProperty(frameIndex,ROWS_PROPERTY); if(frameProperty==null){ frameProperty=star; } return frameProperty; } public void setNoresize(int frameIndex,boolean ifResize){ if(ifResize){ setFrameProperty(frameIndex,"noresize"); } } public void setBorder(int frameIndex,int borderWidth){ setFrameProperty(frameIndex,"border",Integer.toString(borderWidth)); } public void setBorder(int frameIndex,boolean ifBorder){ if(ifBorder){ setFrameProperty(frameIndex,"border","yes"); } else{ setFrameProperty(frameIndex,"border","no"); } } public void setScrollingAuto(int frameIndex){ setFrameProperty(frameIndex,"scrolling","auto"); } public void setScrolling(int frameIndex,boolean ifScrollBar){ if(ifScrollBar){ setFrameProperty(frameIndex,"scrolling","yes"); } else{ setFrameProperty(frameIndex,"scrolling","no"); } } public void setMarginWidth(int frameIndex,int width) { setFrameProperty(frameIndex,"marginwidth",Integer.toString(width)); //getPage(frameIndex).setMarginWidth(width); } public void setMarginHeight(int frameIndex,int height) { setFrameProperty(frameIndex,"marginheight",Integer.toString(height)); //getPage(frameIndex).setMarginHeight(height); } public void setLeftMargin(int frameIndex,int leftmargin) { setFrameProperty(frameIndex,"leftmargin",Integer.toString(leftmargin)); //getPage(frameIndex).setMarginWidth(leftmargin); } public void setTopMargin(int frameIndex,int topmargin) { setFrameProperty(frameIndex,"topmargin",Integer.toString(topmargin)); //getPage(frameIndex).setTopMargin(topmargin); } public void setAllMargins(int frameIndex,int allMargins) { setMarginWidth(frameIndex,allMargins); setMarginHeight(frameIndex,allMargins); setLeftMargin(frameIndex,allMargins); setTopMargin(frameIndex,allMargins); } public void setFrameName(int frameIndex,String name){ setFrameProperty(frameIndex,"name",name); } public void setFrameSource(int frameIndex,String URL){ setFrameProperty(frameIndex,SOURCE_PROPERTY,URL); } public String getFrameSource(int frameIndex){ return getFrameProperty(frameIndex,"src"); } protected void setFrameProperty(int frameIndex,String propertyName,String propertyValue){ //getPage(frameIndex).setFrameProperty(propertyName,propertyValue); this.getFramesPropertyMap(frameIndex).put(propertyName,propertyValue); } protected void setFrameProperty(int frameIndex,String propertyName){ //getPage(frameIndex).setFrameProperty(propertyName); this.getFramesPropertyMap(frameIndex).put(propertyName,slash); } protected String getFrameProperty(int frameIndex,String propertyName){ Map frameProperties = getFramesPropertyMap(frameIndex); if(frameProperties == null){ return null; } return (String)frameProperties.get(propertyName); } protected String getFramePropertiesString(int frameIndex){ Map frameProperties = getFramesPropertyMap(frameIndex); StringBuffer returnString = new StringBuffer(); String Attribute =""; if (frameProperties != null) { Iterator e = frameProperties.keySet().iterator(); while (e.hasNext()){ Attribute = (String)e.next(); if(!(Attribute.equals(ROWS_PROPERTY)||Attribute.equals(CLASS_PROPERTY))){ returnString.append(" "); returnString.append(Attribute); String AttributeValue = (String)frameProperties.get(Attribute); if(!AttributeValue.equals(slash)){ returnString.append("=\""); returnString.append(AttributeValue); returnString.append("\" "); } } } } return returnString.toString(); } /*public Page getPage(int frameIndex){ return (Page)this.getAllContainingObjects().get(frameIndex-1); }*/ public void setSpanAttribute(){ setSpan(); String property = ""; String comma = ","; int i; for (i = 1; i < this.numberOfFrames; i++) { property += getSpan(i); property += comma; } property += getSpan(i); String propertyName; if(isVertical()){ propertyName = ROWS_PROPERTY; } else{ propertyName = COLS_PROPERTY; } setFrameSetProperty(propertyName,property); } public boolean isVertical(){ return (ALIGNMENT_VERTICAL==this.alignment); } public boolean isHorizontal(){ return (ALIGNMENT_HORIZONTAL==this.alignment); } public void setSpan(){ boolean nothingset=true; for (int i = 1; i <= this.numberOfFrames ; i++){ String span= getSpan(i); if(!span.equals(star)){ nothingset=false; } } if(nothingset){ if(this.numberOfFrames!=0){ int thePercent = (100/this.numberOfFrames); for (int i = 1; i <= this.numberOfFrames ; i++) { setSpanPercent(i,thePercent); } } } } }//End class