package com.idega.idegaweb.browser.app; import com.idega.event.*; import com.idega.idegaweb.browser.presentation.*; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import javax.swing.event.ChangeListener; import com.idega.business.IBOLookup; import com.idega.presentation.*; import com.idega.idegaweb.IWUserContext; import com.idega.idegaweb.browser.event.IWBrowseEvent; import java.rmi.RemoteException; /** * <p>Title: idegaWeb</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: idega Software</p> * @author <a href="gummi@idega.is">Gu�mundur �g�st S�mundsson</a> * @version 1.0 */ public class IWBrowser extends FrameTable implements StatefullPresentation { private String _frameName[] = {"iwb_top","iwb_menu","iwb_middle","iwb_bottom",IWPresentationEvent.DEFAULT_IW_EVENT_TARGET,"iwb_main_left","iwb_main","iwb_main_right"}; public static final int POS_TOP = 0; public static final int POS_MENU = 1; public static final int POS_MIDDLE = 2; public static final int POS_BOTTOM = 3; public static final int POS_EVENT = 4; public static final int POS_LEFTMAIN = 5; public static final int POS_MAIN = 6; public static final int POS_RIGHTMAIN = 7; private int _controlPosition = POS_TOP; // private IWBrowserFrame _topFrame = null; // private IWBrowserFrame _menuFrame = null; // private IWBrowserFrame _mainFrame = null; // private IWBrowserFrame _leftFrame = null; // private IWBrowserFrame _rightFrame = null; private IWBrowserFrame[] _browserFrames = new IWBrowserFrame[7]; private FrameTable _middleFrameset; private boolean _showTopFrame = true; private boolean _showMenuFrame = true; private boolean _showBottomFrame = true; private boolean _showEventFrame = false; private boolean _showLeftMainFrame = true; private boolean _showRightMainFrame = false; private IWBrowserPresentationState _presentationState = null; private final static String IW_BUNDLE_IDENTIFIER = "com.idega.idegaweb.browser"; public IWBrowser() { this.setResizable(true); this.setHeight(400); this.setWidth(600); initializeFrames(); } protected void initializeFrames(){ for (int i = 0; i < this._browserFrames.length; i++) { // System.out.println("IWBrowser.initializeFrames(): "+i); this._browserFrames[i] = new IWBrowserFrame(); this._browserFrames[i].setNameProperty(this.getFrameName(i)); this._browserFrames[i].getLocation().setApplicationClass(this.getClass()); //_browserFrames[i].getLocation().isInFrameSet(true); } this._middleFrameset = new FrameTable(); this._middleFrameset.setHorizontal(); } public String getControlframeTarget(){ return this.getFrameName(this._controlPosition); } public Frame getControlframe(){ return this.getFrame(this.getFrameName(this._controlPosition)); } public String getFrameName(int pos){ return this._frameName[pos]; } protected FrameTable getMiddleFrameset(){ return this._middleFrameset; } public void showTopFrame(boolean value){ this._showTopFrame = value; } public void showMenuFrame(boolean value){ this._showMenuFrame = value; } public void showRightMainFrame(boolean value){ this._showRightMainFrame = value; } public void showLeftMainFrame(boolean value){ this._showLeftMainFrame = value; } public void showBottomFrame(boolean value){ this._showBottomFrame = value; } public void showEventFrame(boolean value){ this._showEventFrame = value; } public boolean showEventFrame(){ return this._showEventFrame; } public boolean showBottomFrame(){ return this._showBottomFrame; } public boolean showRightMainFrame(){ return this._showRightMainFrame; } public boolean showLeftMainFrame(){ return this._showLeftMainFrame; } public boolean showTopFrame(){ return this._showTopFrame; } public boolean showMenuFrame(){ return this._showMenuFrame; } public String getBundleIdentifier(){ return IW_BUNDLE_IDENTIFIER; } public void addToTop(IWBrowserCompliant obj){ this.addToFrame(obj,POS_TOP); } public void addToMenu(IWBrowserCompliant obj){ this.addToFrame(obj,POS_MENU); } public void addToMain(IWBrowserCompliant obj){ this.addToFrame(obj,POS_MAIN); } public void addToLeftMain(IWBrowserCompliant obj){ this.addToFrame(obj,POS_LEFTMAIN); } public void addToRightMain(IWBrowserCompliant obj){ this.addToFrame(obj,POS_RIGHTMAIN); } public void addToBottom(IWBrowserCompliant obj){ this.addToFrame(obj,POS_BOTTOM); } public void addToEvent(IWBrowserCompliant obj){ this.addToFrame(obj,POS_EVENT); } public void setEventURL(String url){ this.getEventFrame().setUrlProperty(url); } public void setSpanPixels(int pos, int pixels){ this._browserFrames[pos].setSpanPixels(pixels); } protected IWBrowserFrame getTopFrame(){ return this._browserFrames[POS_TOP]; } protected IWBrowserFrame getMenuFrame(){ return this._browserFrames[POS_MENU]; } protected IWBrowserFrame getMiddleFrame(){ return this._browserFrames[POS_MIDDLE]; } protected IWBrowserFrame getMainFrame(){ return this._browserFrames[POS_MAIN]; } protected IWBrowserFrame getLeftMainFrame(){ return this._browserFrames[POS_LEFTMAIN]; } protected IWBrowserFrame getRightMainFrame(){ return this._browserFrames[POS_RIGHTMAIN]; } protected IWBrowserFrame getBottomFrame(){ return this._browserFrames[POS_BOTTOM]; } protected IWBrowserFrame getEventFrame(){ return this._browserFrames[POS_EVENT]; } public void addIWActionListener(int pos, IWActionListener l){ this.getFrame(this.getFrameName(pos)).addIWActionListener(l); } /** this method is similar to the method addIWActionListener but uses * the method addActionListener * @param pos * @param l */ public void addActionListener(int pos, IWActionListener l){ this.getFrame(this.getFrameName(pos)).addActionListener(l); } public void modifyFrameObject(IWContext iwc, IWFrameBusiness fb, Frame frame) throws RemoteException { // System.out.println("IWBrowser.modifyFrameObject"); //if(frame.getFrameType() == Frame.OBJ || frame.getFrameType() == Frame.FRAMESET ){ PresentationObject obj = frame.getPresentationObject(); // System.out.println("frame.getPresentationObject() = "+obj); if(obj instanceof IWBrowserView){ ((IWBrowserView)obj).setControlTarget(this.getControlframeTarget()); IWBrowseEvent model = new IWBrowseEvent(); model.setApplicationIdentifier(this,fb); model.setControlFrameTarget(getControlframeTarget()); model.setSourceTarget(frame); // System.out.println("-----------------------------"); // System.out.println("IWBrowser.frame.location: " +frame.getLocation().getLocationString()); //model.setSource(frame.getLocation()); String id = frame.getCompoundId(); obj.setArtificialCompoundId(id,iwc); model.setSource(frame); ((IWBrowserView)obj).setControlEventModel(model); // Parameter appPrm = new Parameter(IW_FRAMESET_PAGE_PARAMETER,fb.getFrameSetIdentifier(this)); // ((IWBrowserView)obj).setApplicationParameter(appPrm); // Parameter ctrlFP = new Parameter(IW_FRAME_NAME_PARAMETER,getControlframeTarget()); // ((IWBrowserView)obj).setControlFrameParameter(ctrlFP); // Parameter src = new Parameter(PRM_IW_BROWSE_EVENT_SOURCE, frame.getName()); // ((IWBrowserView)obj).setSourceParamenter(src); } //} } protected void addToFrame(Frame frame, IWBrowserCompliant obj){ if (obj instanceof PresentationObject ){ if(frame.getPresentationObject() != null){ ((Page)frame.getPresentationObject()).add((PresentationObject)obj); } else { if(obj instanceof Page){ frame.setPresentationObject((Page)obj); } else { /** * @todo */ Page page = new Page(); page.add(obj); frame.setPresentationObject(page); } } } else { // unexpected Object System.err.println("IWBrowser.addToFrame(Frame frame, SomeName obj) - unexpected Object type"); } } protected void addToFrame(IWBrowserCompliant obj, int pos){ IWBrowserFrame frame = null; switch (pos) { case POS_TOP: frame = this.getTopFrame(); addToFrame(frame, obj); break; case POS_MENU: frame = this.getMenuFrame(); addToFrame(frame, obj); break; case POS_BOTTOM: frame = this.getBottomFrame(); addToFrame(frame, obj); break; case POS_EVENT: frame = this.getEventFrame(); addToFrame(frame, obj); break; case POS_MAIN: frame = this.getMainFrame(); addToFrame(frame, obj); break; case POS_LEFTMAIN: frame = this.getLeftMainFrame(); addToFrame(frame, obj); break; case POS_RIGHTMAIN: frame = this.getRightMainFrame(); addToFrame(frame, obj); break; default : // throw new Exception("Position not defined"); break; } // // switch (pos) { // case POS_TOP: // // break; // case POS_MENU: // // break; // case POS_MAIN: // // break; // case POS_LEFTMAIN: // // break; // case POS_RIGHTMAIN: // // break; // default : // // throw new Exception("Position not defined"); // break; // } // } public Page getControlFramePresentation(IWUserContext iwc, boolean askForPermission){ return getFrame(this.getFrameName(this._controlPosition), iwc, askForPermission); } public void _main(IWContext iwc) throws Exception { //System.out.println("in _main()"); if(this._showTopFrame || this._showMenuFrame || this._showBottomFrame || this._showEventFrame){ if(this._showTopFrame){ this.add(this.getTopFrame()); } if(this._showMenuFrame){ this.add(this.getMenuFrame()); } if(this._showLeftMainFrame || this._showRightMainFrame ){ if(this._showLeftMainFrame){ this._middleFrameset.add(this.getLeftMainFrame()); } this._middleFrameset.add(this.getMainFrame()); if(this._showRightMainFrame){ this._middleFrameset.add(this.getRightMainFrame()); } IWBrowserFrame bFrame = this.getMiddleFrame(); bFrame.setPresentationObject(this._middleFrameset); this.add(bFrame); } else { this.add(this.getMainFrame()); } if(this._showBottomFrame) { this.add(this.getBottomFrame()); } if(this._showEventFrame){ this.add(this.getEventFrame()); } } else if (this._showLeftMainFrame || this._showRightMainFrame ) { this.setMarkupAttributes(this._middleFrameset.getMarkupAttributes()); if(this._showLeftMainFrame){ this.add(this.getLeftMainFrame()); } this.add(this.getMainFrame()); if(this._showRightMainFrame){ this.add(this.getRightMainFrame()); } } else { this.add(this.getMainFrame()); } // get all change listeners Collection changeListeners; try { IWStateMachine stateMachine = (IWStateMachine) IBOLookup.getSessionInstance(iwc, IWStateMachine.class); changeListeners = stateMachine.getAllChangeListeners(); } catch (RemoteException e) { changeListeners = new ArrayList(); } // System.out.println("IWBrowser: addChangeListener ..."); Frame ctrlFrame = this.getControlframe(); if(ctrlFrame != null){ PresentationObject ctrlFrameObject = ctrlFrame.getPresentationObject(); // System.out.println("IWBrowser: addChangeListener ...0"); if(ctrlFrameObject instanceof IWBrowseControl){ // System.out.println("IWBrowser: addChangeListener ...1"); //ChangeListener ctrlFrameListener = ((IWBrowseControl)ctrlFrameObject).getChangeControler(); List l = this.getAllContainedFrames(); if(l != null){ // System.out.println("IWBrowser: addChangeListener ...2"); Iterator iter = l.iterator(); while (iter.hasNext()) { // System.out.println("IWBrowser: addChangeListener ...3 while"); Frame item = (Frame)iter.next(); // if(item != ctrlFrame){ PresentationObject obj = item.getPresentationObject(); if(obj instanceof StatefullPresentation){ // System.out.println("IWBrowser: addChangeListener -> "+ctrlFrameListener); ///////////((StatefullPresentation)obj).getPresentationState(iwc).addChangeListener(ctrlFrameListener); Iterator iterator = changeListeners.iterator(); while (iterator.hasNext()) { ((StatefullPresentation)obj).getPresentationState(iwc).addChangeListener((ChangeListener) iterator.next()); } } // } } } } } super._main(iwc); } protected class IWBrowserFrame extends Frame { //implements IWBrowserCompliant{ // private boolean _isControlFrame = false; public IWBrowserFrame(){ } // public boolean isControlFrame(){ // return _isControlFrame; // } public void setPresentationObject(PresentationObject obj){ if(!(obj instanceof IWBrowserCompliant)){ // Warning } super.setPresentationObject(obj); } public void setPresentationObject(IWBrowserCompliant obj){ if(obj instanceof PresentationObject){ super.setPresentationObject((PresentationObject)obj); } else { //Error } } // public IWEventListener getListener(){return null;} } // public class TopFrame extends Window {} // public class MenuFrame extends Window {} // // public class MainFrame extends FrameSet { // // public MainFrame(){ // this.add(LeftMain.class, frameNameMainLeft); // this.add(RightMain.class, frameNameMainRight); // this.setHorizontal(); // } // // } // // public class LeftMain extends Window {} // public class RightMain extends Window {} // public void setPresentationState( IWPresentationState state ){ // IWStateMachine stateMachine = IBOLookup.getSessionInstance(this.getIWUserContext(),IWStateMachine.class); // if(state instanceof IWBrowserPresentationState){ // _presentationState = (IWBrowserPresentationState)state; // } else { // System.err.println("PresentationState not instanceof IWBrowserPresentationState"); // } // // } public IWPresentationState getPresentationState(IWUserContext iwuc){ if(this._presentationState == null){ try { IWStateMachine stateMachine = (IWStateMachine)IBOLookup.getSessionInstance(iwuc,IWStateMachine.class); this._presentationState = (IWBrowserPresentationState)stateMachine.getStateFor(getCompoundId(),this.getPresentationStateClass()); } catch (RemoteException re) { throw new RuntimeException(re.getMessage()); } } return this._presentationState; } public Class getPresentationStateClass(){ return IWBrowserPresentationState.class; } }