Project: contribution_eevolution_smart_browser
/******************************************************************************
 * Copyright (C) 2008 Low Heng Sin                                            * 
 * Copyright (C) 2008 Idalica Corporation                                     *   
 * This program is free software; you can redistribute it and/or modify it    * 
 * under the terms version 2 of the GNU General Public License as published   * 
 * by the Free Software Foundation. This program is distributed in the hope   * 
 * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * 
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.           * 
 * See the GNU General Public License for more details.                       * 
 * You should have received a copy of the GNU General Public License along    * 
 * with this program; if not, write to the Free Software Foundation, Inc.,    * 
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.                     * 
 *****************************************************************************/
package org.adempiere.webui.desktop; 
 
import java.util.ArrayList; 
import java.util.List; 
 
import org.adempiere.webui.ClientInfo; 
import org.adempiere.webui.component.Window; 
import org.adempiere.webui.exception.ApplicationException; 
import org.adempiere.webui.part.AbstractUIPart; 
import org.compiere.model.MMenu; 
import org.compiere.util.CLogger; 
import org.compiere.util.Env; 
import org.zkoss.zk.ui.event.Events; 
 
/**
 * Base class for desktop implementation 
 * @author hengsin 
 * 
 */
 
public abstract class AbstractDesktop extends AbstractUIPart implements IDesktop { 
 
 private transient ClientInfo clientInfo; 
 
 private List<Object> windows = null
 
 @SuppressWarnings("unused"
 private static final CLogger logger = CLogger.getCLogger(AbstractDesktop.class); 
 
 public AbstractDesktop() { 
  windows = new ArrayList<Object>(); 
 
  
 /**
     * Event listener for menu item selection. 
     * Identifies the action associated with the selected 
     * menu item and acts accordingly. 
     *  
     * @param menuId Identifier for the selected menu item 
     *  
     * @throws ApplicationException If the selected menu action has yet  
     *          to be implemented 
     */
 
    public void onMenuSelected(int menuId) 
    { 
        MMenu menu = new MMenu(Env.getCtx(), menuId, null); 
        if(menu == null
        { 
            return
        } 
 
        if(menu.getAction().equals(MMenu.ACTION_Window)) 
        { 
         openWindow(menu.getAD_Window_ID()); 
        } 
        else if(menu.getAction().equals(MMenu.ACTION_Process) || 
          menu.getAction().equals(MMenu.ACTION_Report)) 
        { 
         openProcessDialog(menu.getAD_Process_ID(), menu.isSOTrx()); 
        } 
        else if(menu.getAction().equals(MMenu.ACTION_Form)) 
        { 
         openForm(menu.getAD_Form_ID());          
        } 
        else if(menu.getAction().equals(MMenu.ACTION_WorkFlow)) 
        { 
         openWorkflow(menu.getAD_Workflow_ID()); 
        } 
        else if(menu.getAction().equals(MMenu.ACTION_Task)) 
        { 
         openTask(menu.getAD_Task_ID()); 
        } 
        else if(menu.getAction().equals("S")) 
        { 
         openSmartBrowser((Integer)menu.get_Value("AD_Browse_ID")); 
        } 
        else 
        { 
            throw new ApplicationException("Menu Action not yet implemented: " + menu.getAction()); 
        } 
    } 
     
    /**
  * @return clientInfo 
  */
 
 public ClientInfo getClientInfo() { 
  return clientInfo; 
 
 
 /**
  *  
  * @param clientInfo 
  */
 
 public void setClientInfo(ClientInfo clientInfo) { 
  this.clientInfo = clientInfo; 
 
  
 /**
  * @param win 
  */
 
 public int registerWindow(Object win) { 
  int retValue = windows.size(); 
  windows.add(win); 
  return retValue; 
 
  
 /**
  * @param WindowNo 
  */
 
 public void unregisterWindow(int WindowNo) { 
  if (WindowNo < windows.size()) 
   windows.set(WindowNo, null); 
  Env.clearWinContext(WindowNo); 
 
     
    /**
     *  
     * @param WindowNo 
     * @return Object 
     */
 
 public Object findWindow(int WindowNo) { 
  if (WindowNo < windows.size()) 
   return windows.get(WindowNo); 
  else 
   return null
 
  
    /**
     * @param win 
     */
 
    public void showWindow(Window win)  
    { 
     String pos = win.getPosition(); 
     this.showWindow(win, pos); 
    } 
     
    /**
     * @param win 
     * @param pos 
     */
 
    public void showWindow(Window win, String pos) 
 
     win.setPage(page);   
  Object objMode = win.getAttribute(Window.MODE_KEY); 
 
  String mode = Window.MODE_MODAL; 
   
  if (objMode != null
  
   mode = objMode.toString(); 
  
   
  if (Window.MODE_MODAL.equals(mode)) 
  
   showModal(win); 
  
  else if (Window.MODE_POPUP.equals(mode)) 
  
   showPopup(win, pos); 
  
  else if (Window.MODE_OVERLAPPED.equals(mode)) 
  
   showOverlapped(win, pos); 
  
  else if (Window.MODE_EMBEDDED.equals(mode)) 
  
   showEmbedded(win); 
  
  else if (Window.MODE_HIGHLIGHTED.equals(mode)) 
  
   showHighlighted(win, pos); 
  }   
 
     
    protected abstract void showEmbedded(Window win); 
 
 /**
     *  
     * @param win 
     */
 
    protected void showModal(Window win) 
    
     //fall back to highlighted if can't execute doModal 
     if (Events.inEventListener()) 
     
   try 
   
    win.doModal(); 
   
   catch(InterruptedException e) 
   
     
   
     
     else 
     
      showHighlighted(win, null); 
     
    
 
     
    /**
     *  
     * @param win 
     * @param position 
     */
 
    protected void showPopup(Window win, String position) 
    
     if (position == null
      win.setPosition("center"); 
     else 
      win.setPosition(position); 
      
     win.doPopup(); 
    
     
    /**
     *  
     * @param win 
     * @param position 
     */
 
    protected void showOverlapped(Window win, String position) 
    
  if (position == null
   win.setPosition("center"); 
  else 
   win.setPosition(position); 
   
     win.doOverlapped(); 
    
  
 /**
  *  
  * @param win 
  * @param position 
  */
 
    protected void showHighlighted(Window win, String position) 
    
  if (position == null
   win.setPosition("center"); 
  else 
   win.setPosition(position); 
   
     win.doHighlighted(); 
    
 
    protected String stripHtml(String htmlString, boolean all) { 
  htmlString = htmlString 
  .replace("<html>"""
  .replace("</html>"""
  .replace("<body>"""
  .replace("</body>"""
  .replace("<head>"""
  .replace("</head>"""); 
   
  if (all) 
   htmlString = htmlString 
   .replace(">"">"
   .replace("<""<"); 
  return htmlString; 
 
}