diff --git a/serverApps/.classpath b/serverApps/.classpath index 7ceb23970f..bea8b213d6 100644 --- a/serverApps/.classpath +++ b/serverApps/.classpath @@ -8,7 +8,5 @@ - - diff --git a/serverApps/build.xml b/serverApps/build.xml index 61faf62aa5..3e7daca31f 100644 --- a/serverApps/build.xml +++ b/serverApps/build.xml @@ -17,18 +17,13 @@ - - - - - @@ -39,8 +34,6 @@ - - diff --git a/serverApps/src/main/servlet/org/compiere/jsf/AdempiereServlet.java b/serverApps/src/main/servlet/org/compiere/jsf/AdempiereServlet.java deleted file mode 100755 index 613b269d47..0000000000 --- a/serverApps/src/main/servlet/org/compiere/jsf/AdempiereServlet.java +++ /dev/null @@ -1,106 +0,0 @@ -/****************************************************************************** - * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * - * 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. * - * For the text or an alternative of this public license, you may reach us * - * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * - * or via info@compiere.org or http://www.compiere.org/license.html * - *****************************************************************************/ -package org.compiere.jsf; - -import java.io.IOException; -import java.util.Properties; -import java.util.logging.Level; -import javax.servlet.Servlet; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.UnavailableException; - -import org.compiere.Adempiere; -import org.compiere.util.CLogMgt; -import org.compiere.util.CLogger; -import org.compiere.util.Env; -import org.compiere.util.Ini; -import org.compiere.util.Login; - -/** - * for this project, this servlet needs to be replaced by a backing bean that can also log out - * initializes the adempiere "engine" -- basically logs into the server - * web.xml snippet: - * - adempiereInitServlet - org.compiere.jsf.AdempiereInitServlet - 1 - - * @author rfreden - * @todo wouldn't it be cool to have a Filter to implement lazy loading? - * @fixme the adempiere code here does a System.exit (terminating tomcat...) if it fails to connect to the db - */ -public class AdempiereServlet implements Servlet -{ - private static final CLogger log=CLogger.getCLogger(AdempiereServlet.class); - - private Properties adempiereProperties; - - private ServletConfig servletConfig=null; - - /** - * nop method, because this servlet doesn't actually serve anything - */ - public void service(ServletRequest servletRequest,ServletResponse servletResponse) - throws ServletException, IOException - {} - - public void init(ServletConfig s) throws ServletException - { - servletConfig=s; - // Adempiere start up and properties setup - //org.compiere.Adempiere.startupEnvironment(true); - if(!Adempiere.startupEnvironment(true)) - throw new UnavailableException("adempiere init failed"); - adempiereProperties = Env.getCtx(); - //CLogMgt.setLoggerLevel(Level.FINE, null); - CLogMgt.setLevel(Level.ALL); - - Ini.setProperty(Ini.P_UID, "SuperUser"); - Ini.setProperty(Ini.P_PWD, "System"); - Ini.setProperty(Ini.P_ROLE, "GardenWorld Admin"); - Ini.setProperty(Ini.P_CLIENT, "GardenWorld"); - Ini.setProperty(Ini.P_ORG, "*"); - Ini.setProperty(Ini.P_LANGUAGE, "English"); - //Ini.setProperty(Ini.P_LANGUAGE, "Danish_dk_DK"); - Ini.setProperty(Ini.P_WAREHOUSE, ""); - Login login = new Login(adempiereProperties); - - if (!login.batchLogin(null)) - throw new UnavailableException("Adempiere login failed"); - - log.info("adempiere login complete"); - } - - public String getServletInfo() - { - return "Adempiere Initialization Servlet"; - } - - public ServletConfig getServletConfig() - { - return servletConfig; - } - - /** - * @todo implement this method - */ - public void destroy() - {} -} diff --git a/serverApps/src/main/servlet/org/compiere/jsf/DynamicActionListenerLookup.java b/serverApps/src/main/servlet/org/compiere/jsf/DynamicActionListenerLookup.java deleted file mode 100755 index c19510da6d..0000000000 --- a/serverApps/src/main/servlet/org/compiere/jsf/DynamicActionListenerLookup.java +++ /dev/null @@ -1,222 +0,0 @@ -/****************************************************************************** - * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * - * 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. * - * For the text or an alternative of this public license, you may reach us * - * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * - * or via info@compiere.org or http://www.compiere.org/license.html * - *****************************************************************************/ -package org.compiere.jsf; - -import java.util.HashMap; - -import javax.faces.context.FacesContext; -import javax.faces.event.ActionEvent; - -import org.compiere.model.GridTab; -import org.compiere.model.GridWindow; -import org.compiere.util.CLogger; - -/** - * this class does the actual work for variables that start with actionListener_lookup - * basically every method here should have a void return type and take an ActionEvent as argument - * TODO: implement all methods for the dropdown and button menus, list them here - * gridToggle - * - * @author rfreden - * - */ -public class DynamicActionListenerLookup -{ - // this class makes use of the hidden variable "tabNo" - // which contains tab0Grid or somesuch, identifying the panel that's currently on top - // where the digit in the middle is the tabNo for compiere - - // in case it will matter, it will also have a windowNo, a unique window identifier for compiere - private static final CLogger log=CLogger.getCLogger(DynamicActionListenerLookup.class); - - private FacesContext facesContext; - - private Long tabNo; - - private TabStateManager tabStateManager; - - public DynamicActionListenerLookup(FacesContext ctx) - { - facesContext=ctx; - tabStateManager=new TabStateManager(facesContext); - } - - // FIXME: implement all these method stubs - public void undo(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void help(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void createNew(ActionEvent ae) - { - throw new UnsupportedOperationException(); - - } - - public void delete(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - /** - * tab control actionListener method; use actionListener="actionListener_lookup.focus" - * to raise the tab described by currentTabNo - * @param ae - */ - public void focus(ActionEvent ae) - { - log.info("focusing on tabNo "+tabNo); - tabStateManager.getUIState().setTabNo(tabNo.intValue()); - } - - public void save(ActionEvent ae) - { - // save tab on window - // check if this is called during the - GridTab gridTab=getCurrentGridTab(); - gridTab.getTableModel().open(0); - log.info("saving tab "+gridTab.getTabNo()); - if(!gridTab.dataSave(true)) - log.info("failed to save tab"); - } - - public void refresh(ActionEvent ae) - { - log.info("called"); - // FIXME: this open method is hackish at best - getCurrentGridTab().getTableModel().open(0); - getCurrentGridTab().dataRefresh(); - } - - public void lookup(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void attachment(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } -/* - public void gridToggle(ActionEvent ae) - { - log.info("entered"); - tabStateManager.gridToggle(); - } -*/ - public void history(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void menu(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void parent(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void detail(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void first(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void previous(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void next(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void last(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void report(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void archived(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void print(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void zoom(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void active(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void check(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void product(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void exit(ActionEvent ae) - { - throw new UnsupportedOperationException(); - } - - public void setTabNo(Long l) - { - log.info("setting tabNo to "+l); - tabNo=l; - } - - // these three parse the tabNo string - // FIXME: check them - private GridTab getCurrentGridTab() - { - Integer key=new Integer(tabStateManager.getUIState().getWindowNo()); - // get window from hashmap "grids" - GridWindow gridWindow=((HashMap)facesContext.getExternalContext() - .getSessionMap().get("grids")).get(key); - return gridWindow.getTab(tabStateManager.getUIState().getTabNo().intValue()); - } -} diff --git a/serverApps/src/main/servlet/org/compiere/jsf/DynamicActionListenerPropertyResolver.java b/serverApps/src/main/servlet/org/compiere/jsf/DynamicActionListenerPropertyResolver.java deleted file mode 100755 index 8546b22aea..0000000000 --- a/serverApps/src/main/servlet/org/compiere/jsf/DynamicActionListenerPropertyResolver.java +++ /dev/null @@ -1,116 +0,0 @@ -/****************************************************************************** - * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * - * 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. * - * For the text or an alternative of this public license, you may reach us * - * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * - * or via info@compiere.org or http://www.compiere.org/license.html * - *****************************************************************************/ -package org.compiere.jsf; - -import javax.faces.el.PropertyNotFoundException; -import javax.faces.el.PropertyResolver; -import org.compiere.util.CLogger; - -/** - * this class continues the el lookup initiated by DynamicActionListenerVariableResolver, - * resolving the value to the proper name - * hmmm, i think this whole class is unnecessary - */ -public class DynamicActionListenerPropertyResolver extends PropertyResolver -{ - private final static CLogger log=CLogger.getCLogger(DynamicActionListenerPropertyResolver.class); - - private PropertyResolver originalResolver; - - public DynamicActionListenerPropertyResolver(PropertyResolver propertyResolver) - { - //log.info("entered"); - originalResolver = propertyResolver; - } - - public Object getValue(Object base,Object property) throws PropertyNotFoundException - { - if (base instanceof DynamicActionListenerLookup) - { - if(property instanceof Long) - ((DynamicActionListenerLookup)base).setTabNo((Long)property); - return base; - //throw new PropertyNotFoundException(); - } - return originalResolver.getValue(base,property); - } - - public Object getValue(Object base,int index) throws PropertyNotFoundException - { - if(base instanceof DynamicActionListenerLookup) - throw new PropertyNotFoundException(); - return originalResolver.getValue(base,index); - } - - /** - * TODO: test this method - */ - public void setValue(Object base,Object property,Object value) throws PropertyNotFoundException - { - //log.info("entered"); - if(base instanceof DynamicActionListenerLookup) - throw new PropertyNotFoundException("attempted to call set on a read-only field"); - else - { - originalResolver.setValue(base,property,value); - } - } - - public void setValue(Object obj,int i,Object obj1) throws PropertyNotFoundException - { - //log.info("entered"); - if(obj instanceof DynamicActionListenerLookup) - throw new PropertyNotFoundException(); - else - originalResolver.setValue(obj,i,obj1); - } - - public boolean isReadOnly(Object base,Object property) throws PropertyNotFoundException - { - //log.info("entered"); - if(base instanceof DynamicActionListenerLookup) - throw new PropertyNotFoundException(); - return originalResolver.isReadOnly(base,property); - } - - public boolean isReadOnly(Object obj,int i) throws PropertyNotFoundException - { - //log.info("entered"); - if(obj instanceof DynamicActionListenerLookup) - throw new PropertyNotFoundException(); - return originalResolver.isReadOnly(obj,i); - } - - // this should probably throw for our object - public Class getType(Object obj,Object obj1) throws PropertyNotFoundException - { - //log.info("entered"); - //if (!(obj instanceof DynamicFieldLookup)) - // hope this works.. - return originalResolver.getType(obj,obj1); - //else - // return com.ibm.faces.databind.SelectItemsWrapper.class; - } - - public Class getType(Object obj,int i) throws PropertyNotFoundException - { - //log.info("entered"); - if(obj instanceof DynamicActionListenerLookup) - throw new PropertyNotFoundException(); - return originalResolver.getType(obj,i); - } -} diff --git a/serverApps/src/main/servlet/org/compiere/jsf/DynamicActionListenerVariableResolver.java b/serverApps/src/main/servlet/org/compiere/jsf/DynamicActionListenerVariableResolver.java deleted file mode 100755 index ff5de30382..0000000000 --- a/serverApps/src/main/servlet/org/compiere/jsf/DynamicActionListenerVariableResolver.java +++ /dev/null @@ -1,49 +0,0 @@ -/****************************************************************************** - * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * - * 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. * - * For the text or an alternative of this public license, you may reach us * - * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * - * or via info@compiere.org or http://www.compiere.org/license.html * - *****************************************************************************/ -package org.compiere.jsf; - -import javax.faces.context.FacesContext; -import javax.faces.el.VariableResolver; -import org.compiere.util.CLogger; - -/** - * this class exists only to signal that this is a custom lookup - */ -public class DynamicActionListenerVariableResolver extends VariableResolver -{ - private static final String LOOKUP_VAR="actionListener_lookup"; - private static final CLogger log=CLogger.getCLogger(DynamicActionListenerVariableResolver.class); - - private VariableResolver originalResolver; - - public DynamicActionListenerVariableResolver(VariableResolver variableResolver) - { - originalResolver=variableResolver; - } - - public Object resolveVariable(FacesContext facescontext, String s) - { - //log.info("resolving var "+s); - if(s.equals(LOOKUP_VAR)) - { - //log.info("matched a dynamic lookup for "+LOOKUP_VAR); - return new DynamicActionListenerLookup(facescontext); - } - //log.info("failed to match"); - return originalResolver.resolveVariable(facescontext,s); - } -} diff --git a/serverApps/src/main/servlet/org/compiere/jsf/DynamicFieldLookup.java b/serverApps/src/main/servlet/org/compiere/jsf/DynamicFieldLookup.java deleted file mode 100755 index cbc41fc294..0000000000 --- a/serverApps/src/main/servlet/org/compiere/jsf/DynamicFieldLookup.java +++ /dev/null @@ -1,333 +0,0 @@ -/****************************************************************************** - * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * - * 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. * - * For the text or an alternative of this public license, you may reach us * - * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * - * or via info@compiere.org or http://www.compiere.org/license.html * - *****************************************************************************/ -package org.compiere.jsf; - -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.logging.Level; - -import javax.faces.context.FacesContext; -import javax.faces.el.PropertyNotFoundException; -import javax.faces.model.SelectItem; - -import org.compiere.model.GridField; -import org.compiere.model.GridTab; -import org.compiere.model.GridWindow; -import org.compiere.util.CLogger; -import org.compiere.util.DB; -import org.compiere.util.Env; -import org.compiere.util.NamePair; - -/** - * this class provides enough of an interface to compiere to get values for a - * field's label, tooltip text, and value from the compiere model - */ -public class DynamicFieldLookup -{ - private final static CLogger log=CLogger.getCLogger(DynamicFieldLookup.class); - - private FacesContext facesContext; - - private Long tabNumber; - - private String columnName; - - private GridTab gridTab; - - private TabStateManager tabStateManager; - - // this exists so we can always call .value in el - static public class FieldProxy - { - private GridField gridField; - - public FieldProxy(GridField gF) - { - gridField=gF; - } - - public Object getValue() - { - return convertToValue(); - } - - public String getLabel() - { - //log.info("returning label "+gridField.getHeader()); - if(gridField.getDisplayType()==28) - { - if (gridField.getColumnName().equals("PaymentRule")) - { - return readReference(195); - //this.setForeground(Color.blue); - //setIcon(Env.getImageIcon("Payment16.gif")); // 29*14 - } - else if (gridField.getColumnName().equals("DocAction")) - { - return readReference(135); - //this.setForeground(Color.blue); - //setIcon(Env.getImageIcon("Process16.gif")); // 16*16 - } - else if (gridField.getColumnName().equals("CreateFrom")) - { - //setIcon(Env.getImageIcon("Copy16.gif")); // 16*16 - } - else if (gridField.getColumnName().equals("Record_ID")) - { - //setIcon(Env.getImageIcon("Zoom16.gif")); // 16*16 - // FIXME: this probably does something that needs to be emulated in our jsf layer - //this.setText(Msg.getMsg(Env.getCtx(), "ZoomDocument")); - } - else if (gridField.getColumnName().equals("Posted")) - { - return readReference(234); - //this.setForeground(Color.magenta); - //setIcon(Env.getImageIcon("InfoAccount16.gif")); // 16*16 - } - } - return gridField.getHeader(); - } - - public String getTooltip() - { - return gridField.getDescription(); - } - - // arg may need to be an Object to handle all cases - public void setValue(Object o) - { - String s=o.toString(); - // some values may not be writable, should catch it in DynamicFieldPropertyResolver.isReadOnly - if(s.equals("true")) - s="Y"; - else if(s.equals("false")) - s="N"; - - // TODO: this really probably belongs somewhere else - - String ret=gridField.setValueValidate(s,true); - if(ret!=null) - throw new PropertyNotFoundException(ret); - //log.info("got back from setValueValidate (null is success) "+ret); - } - - // this is for conversion in jsf - public Class getType() - { - // TODO: there probably need to be other types here (Date in the future, for one) - if(gridField.getDisplayType()==20) - return java.lang.Boolean.class; - return java.lang.String.class; - } - - private Object convertToValue() - { - int displayType=gridField.getDisplayType(); - //log.info("got display type "+displayType); - // TODO: this only has like... 3 or 4 unique cases, refactor for - // reuse - // check display type to genereate jsf code for each specific - // component - switch (displayType) - { - case 10: - case 11: - case 12: - case 13: - case 14: - case 22: - case 29: - case 33: - case 34: - case 35: - case 36: - case 37: - // text box - // check if same line. make sure that it isn't the first field. - // It is possible that the first field can have same line checked and that would cause - // formatting issues. - log.info("getValue1 "+gridField.getValue()); - log.info("getValue2 "+gridField.getValue()); - return gridField.getValue(); - case 15: - // may want to convert this to a java.util.Date, same for case 16 - // date. have to chop timestamp off of gridField value - String dateString=""; - if(gridField.getValue()!=null) - { - String[] dateArray=gridField.getValue().toString().split(" "); - dateString=dateArray[0]; - return dateString; - } - case 16: - // probably unused so far - // date + time - // check if same line. make sure that it isn't the first field. - // It is possible that the first field can have same line checked and that - // would cause formatting issues. - return gridField.getValue(); - case 17: - case 18: - case 19: - // check if same line. make sure that it isn't the first field. - // It is possible that the first field can have same line checked and that would cause - // formatting issues. - ArrayList tmp=gridField.getLookup().getData(true, true, true, true); - ArrayList valueNamePairList=tmp; - ArrayList selectItems=new ArrayList(); - for(int i=0; i(); - String SQL; - if (Env.isBaseLanguage(Env.getCtx(), "AD_Ref_List")) - SQL = "SELECT Name FROM AD_Ref_List WHERE AD_Reference_ID=?"; - else - SQL = "SELECT t.Name FROM AD_Ref_List l, AD_Ref_List_Trl t " - + "WHERE l.AD_Ref_List_ID=t.AD_Ref_List_ID" - + " AND t.AD_Language='" + Env.getAD_Language(Env.getCtx()) + "'" - + " AND l.AD_Reference_ID=?"; - - try - { - PreparedStatement pstmt = DB.prepareStatement(SQL, null); - pstmt.setInt(1, AD_Reference_ID); - ResultSet rs = pstmt.executeQuery(); - rs.next(); - String name = rs.getString(1); - rs.close(); - pstmt.close(); - return name; - } - catch (SQLException e) - { - log.log(Level.SEVERE, SQL, e); - } - return "ERROR"; - } // readReference - } // end FieldProxy - - public DynamicFieldLookup(FacesContext ctx) - { - facesContext=ctx; - tabStateManager=new TabStateManager(facesContext); - } - - public FieldProxy getProxy() - { - return new FieldProxy(gridTab.getField(columnName)); - } - - /** - * sets the GridTab for this field - * @param l - */ - public void setTabNumber(Long l) - { - //log.info("setting tab number"); - tabNumber=l; - // window # is available as a hidden field named windowNo - // GridWindows are stored in a session Map called grid - HashMap grids=(HashMap)facesContext.getExternalContext().getSessionMap().get("grids"); - //log.info("grids is "+grids+" getting windowNo "+tabStateManager.getUIState().getWindowNo()); - GridWindow gridWindow=grids.get(new Integer(tabStateManager.getUIState().getWindowNo())); - //log.info("gridWindow is "+gridWindow); - gridTab=gridWindow.getTab((int)tabNumber.longValue()); - //log.info("gridTab open status "+gridTab.isOpen()); - } - - /** - * - */ - public void setColumnName(String s) - { - // error checking for testing in development, all of this but the final assignment can be commented out in release - boolean b=false; - GridField[] gridFields=gridTab.getFields(); - for(int i=0;i > getProxies() - { - GridField[] gridFields=gridTab.getFields(); - ArrayList fieldProxies=new ArrayList(); - log.info("got "+gridFields.length+" fields"); - for (int i=0;i > tmp=new ArrayList >(); - tmp.add(fieldProxies); - return tmp; - } -} diff --git a/serverApps/src/main/servlet/org/compiere/jsf/DynamicFieldPropertyResolver.java b/serverApps/src/main/servlet/org/compiere/jsf/DynamicFieldPropertyResolver.java deleted file mode 100755 index 1af55b6691..0000000000 --- a/serverApps/src/main/servlet/org/compiere/jsf/DynamicFieldPropertyResolver.java +++ /dev/null @@ -1,172 +0,0 @@ -/****************************************************************************** - * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * - * 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. * - * For the text or an alternative of this public license, you may reach us * - * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * - * or via info@compiere.org or http://www.compiere.org/license.html * - *****************************************************************************/ -package org.compiere.jsf; - -import javax.faces.el.PropertyNotFoundException; -import javax.faces.el.PropertyResolver; -import org.compiere.util.CLogger; - -/** - * this class continues the el lookup initiated by DynamicFieldVariableResolver, - * resolving the value to the proper name - * - * TODO: this should deduce the tab number from the hidden field id = "tabNo" - */ -public class DynamicFieldPropertyResolver extends PropertyResolver -{ - // yes these should probably be an enum - public static final String DYNAMIC_VALUE_TOKEN="value"; - public static final String DYNAMIC_LABEL_TOKEN="label"; - public static final String DYNAMIC_TOOLTIP_TOKEN="tooltip"; - public static final String DYNAMIC_COLLECTION_TOKEN="fields"; - // less related to the others, these are more application state than 1:1 with compiere model - //public static final String DYNAMIC_TAB_TOKEN="tabNo"; - //public static final String DYNAMIC_GRID_TOKEN="gridView"; - - private final static CLogger log=CLogger.getCLogger(DynamicFieldPropertyResolver.class); - - private PropertyResolver originalResolver; - - public DynamicFieldPropertyResolver(PropertyResolver propertyResolver) - { - originalResolver = propertyResolver; - } - - public Object getValue(Object o1,Object o2) throws PropertyNotFoundException - { - //log.info("entered getValue(Object,Object), base is type "+o1.getClass().getName()+" property is type "+o2.getClass().getName()+" value "+o2.toString()); - if (o1 instanceof DynamicFieldLookup) - { - //log.info("matches dynamic lookup"); - DynamicFieldLookup dynamicFieldLookup=(DynamicFieldLookup)o1; - if(o2 instanceof Long) - { - //log.info("looking up tab index "+(Long)o2); - dynamicFieldLookup.setTabNumber((Long)o2); - return dynamicFieldLookup; - } - else - { - //log.info("looking up named property "+(String)o2); - String s=(String)o2; - if(s.equals(DYNAMIC_VALUE_TOKEN)) - { - Object o=dynamicFieldLookup.getProxy().getValue(); - return o; - } - else if(s.equals(DYNAMIC_LABEL_TOKEN)) - return dynamicFieldLookup.getProxy().getLabel(); - else if(s.equals(DYNAMIC_TOOLTIP_TOKEN)) - return dynamicFieldLookup.getProxy().getTooltip(); - else if(s.equals(DYNAMIC_COLLECTION_TOKEN)) - return dynamicFieldLookup.getProxies(); - //else if(s.equals(DYNAMIC_TAB_TOKEN)) - // return dynamicFieldLookup.getTabNo(); - //else if(s.equals(DYNAMIC_GRID_TOKEN)) - // return dynamicFieldLookup.getGridView(); - else - { - dynamicFieldLookup.setColumnName(s); - return dynamicFieldLookup; - } - } - } - return originalResolver.getValue(o1,o2); - } - - public Object getValue(Object obj,int i) throws PropertyNotFoundException - { - if(obj instanceof DynamicFieldLookup) - throw new PropertyNotFoundException(); - return originalResolver.getValue(obj,i); - } - - /** - * TODO: test this method - */ - public void setValue(Object base,Object property,Object value) throws PropertyNotFoundException - { - if(base instanceof DynamicFieldLookup) - { - //log.info("setValue called for column "+((DynamicFieldLookup)base).getColumnName()+" value type "+value.getClass().getName()+" value "+value.toString()); - DynamicFieldLookup dfl=(DynamicFieldLookup)base; - String s=(String)property; - if(s.equals(DYNAMIC_VALUE_TOKEN)) // FIXME: this will probably break - { - dfl.getProxy().setValue(value.toString()); - } - else // tabNo fits this case - log.info("attempted to call set on read-only field: "+((DynamicFieldLookup)base).getColumnName()+" with terminating token "+s); - } - else - { - originalResolver.setValue(base,property,value); - } - } - - public void setValue(Object obj,int i,Object obj1) throws PropertyNotFoundException - { - if(obj instanceof DynamicFieldLookup) - { - //log.info("setValue with int arg called"); - throw new PropertyNotFoundException(); - } - else - originalResolver.setValue(obj,i,obj1); - } - - // FIXME: this likely needs to be a non constant return for custom lookup (false for value lookup?) - public boolean isReadOnly(Object base,Object property) throws PropertyNotFoundException - { - //log.info("invoked isReadOnly"); - if(base instanceof DynamicFieldLookup) - { - // FIXME: lookups obviously have more properties than just a name - // so we should associate them logically, java enums? or give them to different resolver classes perhaps - log.info("base id DynamicFieldLookup, property is "+property.toString()); - if(property instanceof String && ( ((String)property).equals("value") || ((String)property).equals("gridView") || ((String)property).equals("tabNo") )) - return false; - else - return true; - } - return originalResolver.isReadOnly(base,property); - } - - public boolean isReadOnly(Object obj,int i) throws PropertyNotFoundException - { - //log.info(""); - if(obj instanceof DynamicFieldLookup) - return true; - return originalResolver.isReadOnly(obj,i); - } - - public Class getType(Object base,Object property) throws PropertyNotFoundException - { - //log.info("getType called, base is of type "+base.getClass().getName()+" value "+base.toString()+" property is of type "+property.getClass().getName()+" value "+property.toString()+" and column name is "+((DynamicFieldLookup)base).getColumnName()); - // FIXME: this needs to return the type (to convert to from String) of the column - //return originalResolver.getType(base,property); - //return java.lang.String.class; - return ((DynamicFieldLookup)base).getProxy().getType(); - } - - public Class getType(Object obj,int i) throws PropertyNotFoundException - { - if(obj instanceof DynamicFieldLookup) - throw new PropertyNotFoundException(); - return originalResolver.getType(obj,i); - } -} diff --git a/serverApps/src/main/servlet/org/compiere/jsf/DynamicFieldVariableResolver.java b/serverApps/src/main/servlet/org/compiere/jsf/DynamicFieldVariableResolver.java deleted file mode 100755 index 9e162daa07..0000000000 --- a/serverApps/src/main/servlet/org/compiere/jsf/DynamicFieldVariableResolver.java +++ /dev/null @@ -1,51 +0,0 @@ -/****************************************************************************** - * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * - * 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. * - * For the text or an alternative of this public license, you may reach us * - * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * - * or via info@compiere.org or http://www.compiere.org/license.html * - *****************************************************************************/ -package org.compiere.jsf; - -import javax.faces.context.FacesContext; -import javax.faces.el.VariableResolver; - -import org.compiere.util.CLogger; - -/** - * this class exists only to signal that this is a custom lookup - */ -public class DynamicFieldVariableResolver extends VariableResolver -{ - private static final CLogger log=CLogger.getCLogger(DynamicFieldVariableResolver.class); - - private static final String LOOKUP_VAR="tab_lookup"; - - private VariableResolver originalResolver; - - public DynamicFieldVariableResolver(VariableResolver variableResolver) - { - originalResolver=variableResolver; - } - - public Object resolveVariable(FacesContext facescontext, String s) - { - //log.info("resolving var "+s); - if(s.equals(LOOKUP_VAR)) - { - //log.info("matching tab_lookup"); - return new DynamicFieldLookup(facescontext); - } - //log.info("failed to match"); - return originalResolver.resolveVariable(facescontext,s); - } -} diff --git a/serverApps/src/main/servlet/org/compiere/jsf/JSFFilter.java b/serverApps/src/main/servlet/org/compiere/jsf/JSFFilter.java deleted file mode 100755 index 8569814d6c..0000000000 --- a/serverApps/src/main/servlet/org/compiere/jsf/JSFFilter.java +++ /dev/null @@ -1,934 +0,0 @@ -/******************************************************************************* - * Product: Adempiere ERP & CRM Smart Business Solution * Copyright (C) 1999-2006 - * ComPiere, Inc. All Rights Reserved. * 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. * For the text - * or an alternative of this public license, you may reach us * ComPiere, Inc., - * 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * or via - * info@compiere.org or http://www.compiere.org/license.html * - ******************************************************************************/ -package org.compiere.jsf; - -import java.io.*; -import java.sql.*; -import java.util.*; -import javax.servlet.*; -import javax.servlet.http.*; -import org.compiere.model.*; -import org.compiere.util.*; - -/** - * JSF Filter - * @author zbeatty - */ -public class JSFFilter implements Filter -{ - - private FilterConfig filterConfig = null; - - /** Logging */ - private static CLogger log = CLogger.getCLogger (JSFFilter.class); - - /** GridWindow timestamp */ - private long gridWindowTimestamp; - - /** Environment Variable */ - private Properties ctx; - - /** ID's and Window Nums */ - private int windowId; - - private int windowNo; - - /** Tab count */ - private int tabCount; - - /** GridWindow, GridTab, GridFields */ - private GridWindow gridWindow = null; - - private ArrayList tabList; - - /** - * Init - * @param config configuration - * @throws ServletException - */ - public void init(FilterConfig filterConfig) - throws ServletException - { - this.filterConfig = filterConfig; - ctx = Env.getCtx (); - } - - /** - * Destroy - */ - public void destroy() - { - this.filterConfig = null; - } - - /** - * The filter checks to see if the requested file already exists. If it - * doesn't exist, then it generates a new file for the page requested. If it - * does exist, it compares the timestamp on the file to the timestamp on the - * GridWindow object to make sure it is not out of date. If it is out of - * date, it generates a new file for the page requested. If it is not out of - * date, displays the existing, up to date file. - * @param ServletRequest request - * @param ServletResponse response - * @param FilterChain chain - * @throws IOException - * @throws ServletException - */ - public void doFilter(ServletRequest request, ServletResponse response, - FilterChain chain) - throws IOException, ServletException - { - // cast request into HttpServletRequest - HttpServletRequest httpServletRequest = (HttpServletRequest)request; - HttpSession session = null; - // get session from request. Using boolean true should create a new - // session if session doesn't exist - try - { - session = httpServletRequest.getSession (true); - } - catch (Exception e) - { - log - .warning ("There was a problem getting the session from the HttpServletRequest"); - } - // get windowNo and windowId out of the request - try - { - windowNo = (Integer.parseInt (httpServletRequest - .getParameter ("windowNo"))); - windowId = (Integer.parseInt (httpServletRequest - .getParameter ("windowId"))); - } - catch (NumberFormatException nfe) - { - log.info ("There was an error getting the request parameters: " - + nfe); - } - // holds HashMap(WindowNo, GridWindow) - HashMap grids = new HashMap (); - StringBuilder generatedJSF = new StringBuilder (); - // get context and path to store file - - // holds servlet context path - String realContextPath = session.getServletContext ().getRealPath ("/"); - try - { - // get "grids" out of the session to see if window exists - // note: attribute "grids" is expected to be in the session before - // the filter is hit. - if (session.getAttribute ("grids") != null) - { - grids = (HashMap)session - .getAttribute ("grids"); - } - // see if requested windowNo is in session - if (grids.isEmpty () || (!grids.containsKey (windowId))) - { - gridWindow = GridWindow.get (ctx, windowNo, windowId); - } - else - { - gridWindow = grids.get (windowNo); - } - String jsfFile = realContextPath + "window/" - + formatNameWithFirstLowerCase (gridWindow.getName ()) + ".jsp"; - File file = new File (jsfFile); - // check if file exists and up to date - if (file.exists ()) - { - gridWindowTimestamp = getGridWindowTimeStamp (); - if (gridWindowTimestamp > file.lastModified ()) - { - generateJSFPage (generatedJSF, realContextPath); - saveFile (file, generatedJSF.toString ()); - } - } - else - { - generateJSFPage (generatedJSF, realContextPath); - saveFile (file, generatedJSF.toString ()); - } - } - catch (NullPointerException npe) - { - log.info ("Null pointer occured getting \"grids\" out of session: " - + npe); - } - // load session attribute - grids.put (windowNo, gridWindow); - session.setAttribute ("grids", grids); - // next filter - chain.doFilter (request, response); - } - - // creates the window, tabs, and fields for the requested window - private void generateJSFPage(StringBuilder jsfString, String realContextPath) - { - // There is a backing bean called menuBean that we will use for the - // menus of all windows - // TODO change titles to - // title="#{tab_lookup[tabNo].fieldColumnName.tooltip}" - jsfString.append (createCompiereHeader ()); - jsfString.append (createHeader ()); - jsfString - .append ("\n\n\n" - + gridWindow.getName () - + "\n\n" - + "\n\n\n" - + "\n\n\n" - // jsf Messages - + "" - + "\n" - + "\n\n\n
\n" - + "\n" - // toolbar (Maybe extract to method) - + "\n" - + "  \n\n" - + "\n" - + "\n" - + "\n" - + "\n" - + "\n  \n\n" - + "\n" - + "\n" - + "\n" - + " \n" - + "\n" - + "\n  \n\n" - + "\n" - + "\n" - + "\n" - + "\n" - + "\n  \n\n" - + "\n" - + "\n" - + "\n" - + "\n" - + "\n  \n\n" - + "\n" - + "\n" - + "\n" - + "\n  \n\n" - + "\n" - + "\n" - + "\n" - + "\n" - + "  \n" - + "\n" - + "\n" - + "
\n" - // hidden field to store window number - + "\n" - + "\n" - + "\n\n" - + "\n\n\n
\n\n"); - // generate tabs - jsfString.append (generateTabInfo ()); - // end generate tabs - jsfString - .append ("
\n
\n" - + "\n"); - // generate jsp pages for tabs. Each tab has a detail page and a table - // page - createDetailPage (realContextPath); - createTablePage (realContextPath); - int orderSubCount = 1; // used to increment orderSub count - for (int i = 0; i < tabCount; i++) - { - GridTab gridTab = gridWindow.getTab (i); - String tabName = formatNameWithFirstLowerCase (gridTab.getName ()); - jsfString.append ("\n\n\n\n\n" + "\n\n\n\n\n"); - } - jsfString - .append ("\n
\n" - + "
\n\n\n
"); - } - - // Generate GridTabs for JSF page - private StringBuilder generateTabInfo() - { - StringBuilder tabString = new StringBuilder (); - tabCount = gridWindow.getTabCount (); - for (int i = 0; i < tabCount; i++) - { - GridTab gridTab = gridWindow.getTab (i); - if (i == 0) - { - tabString - .append ("\n\n\n\n\n" - + "\n"); - } - else if (gridTab.getTabLevel () == 1) - { - tabString - .append ("baseIndentOneTabStyle unselectedTabStyle\" rendered=\"#{!(uiStateBean.tabNo eq " - + gridTab.getTabNo () - + ")}\"" - + " actionListener=\"#{actionListener_lookup[" - + gridTab.getTabNo () - + "].focus}\" onmouseover=\"this.className='baseIndentOneTabStyle " - + "unselectedMouseOverTabStyle';\" onmouseout=\"this.className='baseIndentOneTabStyle unselectedTabStyle';\" />\n" - + "\n"); - } - else if (gridTab.getTabLevel () == 2) - { - tabString - .append ("baseIndentTwoTabStyle unselectedTabStyle\" rendered=\"#{!(uiStateBean.tabNo eq " - + gridTab.getTabNo () - + ")}\"" - + " actionListener=\"#{actionListener_lookup[" - + gridTab.getTabNo () - + "].focus}\" onmouseover=\"this.className='baseIndentTwoTabStyle " - + "unselectedMouseOverTabStyle';\" onmouseout=\"this.className='baseIndentTwoTabStyle unselectedTabStyle';\" />\n" - + "\n"); - } - tabString - .append ("\n\n"); - } - return tabString; - } - - // Generate Detail jsp page - private void createDetailPage(String realContextPath) - { - File detailFile = null; - for (int i = 0; i < tabCount; i++) - { - StringBuilder detailJSP = new StringBuilder (); - detailJSP.append (createCompiereHeader ()); - detailJSP.append (createHeader ()); - detailJSP.append ("\n"); - GridTab gridTab = gridWindow.getTab (i); - String fileName = formatNameWithFirstLowerCase (gridTab.getName ()) - + "Detail"; - String jsfFile = realContextPath + "window/" + fileName + ".jsp"; - detailFile = new File (jsfFile); - gridTab.dataRefreshAll (); - boolean isSolo = false; // true if not same line as previous - for (int j = 0; j < gridTab.getFieldCount (); j++) - { - GridField gridField = gridTab.getField (j); - // check if displayed - if (gridField.isDisplayed ()) - { - int displayType = gridField.getDisplayType (); - // check display type to genereate jsf code for each - // specific component - switch (displayType) - { - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: // this is a Date format. Comes as Date + - // Time and needs to be chopped in Backing - // Bean - case 16: // this is a Date + Time format. - case 21: // complete address comma seperated ex: - // street, city, state, zip - case 22: - case 29: - case 33: - case 34: - case 35: - case 36: - case 37: - // text box - // check if same line. make sure that it isn't the - // first field. It is possible that the - // first field can have same line checked and that - // would cause formatting issues. - if (gridField.isSameLine () && j != 0) - { - isSolo = false; - } - else - { - if (isSolo) - { - detailJSP - .append ("\n"); - } - detailJSP - .append ("\n"); - isSolo = true; - } - detailJSP - .append ("\n\n"); - // check if same line. if yes and not first field, - // close table row - if (gridField.isSameLine () && j != 0) - { - detailJSP - .append ("\n"); - } - break; - case 17: - case 18: - case 19: - // lookup - // check if same line. make sure that it isn't the - // first field. It is possible that the - // first field can have same line checked and that - // would cause formatting issues. - ArrayList al = gridField.getLookup ().getData ( - true, true, true, true); - if (gridField.isSameLine () && j != 0) - { - isSolo = false; - } - else - { - if (isSolo) - { - detailJSP - .append ("\n"); - } - detailJSP - .append ("\n"); - isSolo = true; - } - detailJSP - .append ("\n\n"); - // check if same line. if yes and not first field, - // close table row - if (gridField.isSameLine () && j != 0) - { - detailJSP - .append ("\n"); - } - break; - case 20: - // Check box - // check if same line. make sure that it isn't the - // first field. It is possible that the - // first field can have same line checked and that - // would cause formatting issues. - if (gridField.isSameLine () && j != 0) - { - isSolo = false; - } - else - { - if (isSolo) - { - detailJSP - .append ("\n"); - } - detailJSP - .append ("\n"); - isSolo = true; - } - detailJSP - .append ("\n"); - // check if same line. if yes and not first field, - // close table row - if (gridField.isSameLine () && j != 0) - { - detailJSP - .append ("\n"); - } - break; - case 23: - case 24: - case 25: - case 27: - case 28: - // custom component - // check if same line. make sure that it isn't the - // first field. It is possible that the - // first field can have same line checked and that - // would cause formatting issues. - if (gridField.isSameLine () && j != 0) - { - isSolo = false; - } - else - { - if (isSolo) - { - detailJSP - .append ("\n"); - } - detailJSP - .append ("\n"); - isSolo = true; - } - detailJSP - .append ("\n"); - // check if same line. if yes and not first field, - // close table row - if (gridField.isSameLine () && j != 0) - { - detailJSP - .append ("\n"); - } - break; - case 30: - // search - // check if same line. make sure that it isn't the - // first field. It is possible that the - // first field can have same line checked and that - // would cause formatting issues. - if (gridField.isSameLine () && j != 0) - { - isSolo = false; - } - else - { - if (isSolo) - { - detailJSP - .append ("\n"); - } - detailJSP - .append ("\n"); - isSolo = true; - } - detailJSP - .append ("\n\n"); - // check if same line. if yes and not first field, - // close table row - if (gridField.isSameLine () && j != 0) - { - detailJSP - .append ("\n"); - } - break; - case 31: - // locator - // check if same line. make sure that it isn't the - // first field. It is possible that the - // first field can have same line checked and that - // would cause formatting issues. - if (gridField.isSameLine () && j != 0) - { - isSolo = false; - } - else - { - if (isSolo) - { - detailJSP - .append ("\n"); - } - detailJSP - .append ("\n"); - isSolo = true; - } - detailJSP - .append ("\n\n"); - // check if same line. if yes and not first field, - // close table row - if (gridField.isSameLine () && j != 0) - { - detailJSP - .append ("\n"); - } - break; - case 32: - // image - // check if same line. make sure that it isn't the - // first field. It is possible that the - // first field can have same line checked and that - // would cause formatting issues. - if (gridField.isSameLine () && j != 0) - { - isSolo = false; - } - else - { - if (isSolo) - { - detailJSP - .append ("\n"); - } - detailJSP - .append ("\n"); - isSolo = true; - } - detailJSP - .append ("\n\n"); - // check if same line. if yes and not first field, - // close table row - if (gridField.isSameLine () && j != 0) - { - detailJSP - .append ("\n"); - } - break; - default: - log.severe ("Display Type not handled for " - + gridField.getColumnName () - + " with display type: " - + gridField.getDisplayType ()); - break; - } - } - } - detailJSP.append ("
" - + "\n" - + "\n
\n" - + "\n\n\n
\n" - + "\n" - + "\n" - + "
" - + "\n" - + " \n
" - + "\n" - + "\n
" - + "\n" - + "\n
" - + "\n" - + "\n
"); - saveFile (detailFile, detailJSP.toString ()); - } - } - - // Generate Table jsp page - private void createTablePage(String realContextPath) - { - File tableFile = null; - for (int i = 0; i < tabCount; i++) - { - StringBuilder tableJSP = new StringBuilder (); - tableJSP.append (createCompiereHeader ()); - tableJSP.append (createHeader ()); - GridTab gridTab = gridWindow.getTab (i); - String fileName = formatNameWithFirstLowerCase (gridTab.getName ()) - + "Table"; - String jsfFile = realContextPath + "window/" + fileName + ".jsp"; - tableFile = new File (jsfFile); - gridTab.dataRefreshAll (); - // counter for subscripts - int subscriptCount = 0; - tableJSP - .append ("\n"); - for (int j = 0; j < gridTab.getFieldCount (); j++) - { - GridField gridField = gridTab.getField (j); - tableJSP - .append ("\n\n"); - // check if displayed - if (gridField.isDisplayed ()) - { - int displayType = gridField.getDisplayType (); - // check display type to genereate jsf code for each - // specific component - switch (displayType) - { - case 10: - case 11: - case 12: - case 13: - case 14: - case 15: // this is a Date format. Comes as Date + - // Time and needs to be chopped in Backing - // Bean - case 16: // this is a Date + Time format. - case 21: // complete address comma seperated ex: - // street, city, state, zip - case 22: - case 29: - case 33: - case 34: - case 35: - case 36: - case 37: - // text box - tableJSP.append ("\n"); - break; - case 17: - case 18: - case 19: - // lookup - tableJSP - .append ("\n\n\n"); - break; - case 20: - // check box - tableJSP - .append ("\n"); - break; - case 23: - case 24: - case 25: - case 27: - case 28: - // custom component - tableJSP.append ("\n"); - break; - case 30: - // search - tableJSP - .append ("\n"); - subscriptCount++; - break; - case 31: - // locator - tableJSP - .append ("\n"); - subscriptCount++; - break; - case 32: - // image - tableJSP - .append ("\n"); - subscriptCount++; - break; - default: - log.severe ("Display Type not handled for " - + gridField.getColumnName () - + " with display type: " - + gridField.getDisplayType ()); - subscriptCount++; - break; - } - } - tableJSP.append ("\n"); - } - tableJSP.append (""); - saveFile (tableFile, tableJSP.toString ()); - } - } - - // Save GridWindow jsf test file - private void saveFile(File file, String generatedJSF) - { - try - { - FileWriter out = new FileWriter (file); - out.write (generatedJSF); - out.flush (); - out.close (); - } - catch (IOException ioe) - { - log.severe ("Error " + ioe.toString () - + " occurred in saveGridWindow"); - } - } - - // format name of file or tab - private String formatNameWithFirstLowerCase(String name) - { - String[] tempNameArray = name.split (" "); - for (int i = 0; i < tempNameArray.length; i++) - { - if (i == 0) - { - name = tempNameArray[i].toLowerCase (); - } - else - { - name += tempNameArray[i]; - } - } - return name; - } - - // compiere header - private StringBuilder createCompiereHeader() - { - StringBuilder compiereHeader = new StringBuilder (); - compiereHeader - .append ("<%--/*************************************************************\n" - + " **********\n" - + " *******\n" - + " * Product: Compiere ERP & CRM Smart Business Solution\n" - + " * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved.\n" - + " * This program is free software; you can redistribute it and/or modify it\n" - + " * under the terms version 2 of the GNU General Public License as published\n" - + " * by the Free Software Foundation. This program is distributed in the hope\n" - + " * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied\n" - + " * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" - + " * See the GNU General Public License for more details.\n" - + " * You should have received a copy of the GNU General Public License along\n" - + " * with this program; if not, write to the Free Software Foundation, Inc.,\n" - + " * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.\n" - + " * You may reach us at: ComPiere, Inc. - http://www.compiere.org/license.html\n" - + " * 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA or info@compiere.org\n" - + " **************************************************************\n" - + " **********\n" + " *****/--%>\n"); - return compiereHeader; - } - - // page header - private StringBuilder createHeader() - { - StringBuilder headerString = new StringBuilder (); - headerString - .append ("<%@page contentType=\"text/html\"%>\n<%@page pageEncoding=\"UTF-8\"%>\n" - + "<%@ taglib uri=\"http://java.sun.com/jsf/core\" prefix=\"f\"%>\n" - + "<%@ taglib uri=\"http://java.sun.com/jsf/html\" prefix=\"h\"%>\n" - + "<%@ taglib uri=\"http://myfaces.apache.org/tomahawk\" prefix=\"t\"%>\n"); - return headerString; - } - - // Get GridWindow TimeStamp - private long getGridWindowTimeStamp() - { - Timestamp timeStamp = gridWindow.getModelUpdated (true); - if (timeStamp.equals (null)) - { - log.severe ("Could not get GridWindow TimeStamp"); - } - return timeStamp.getTime (); - } -} diff --git a/serverApps/src/main/servlet/org/compiere/jsf/MenuBean.java b/serverApps/src/main/servlet/org/compiere/jsf/MenuBean.java deleted file mode 100755 index f3deeee087..0000000000 --- a/serverApps/src/main/servlet/org/compiere/jsf/MenuBean.java +++ /dev/null @@ -1,134 +0,0 @@ -/****************************************************************************** - * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * - * 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. * - * For the text or an alternative of this public license, you may reach us * - * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * - * or via info@compiere.org or http://www.compiere.org/license.html * - *****************************************************************************/ -package org.compiere.jsf; - -import java.util.ArrayList; -import java.util.List; -import org.apache.myfaces.custom.navmenu.NavigationMenuItem; - -import org.apache.log4j.Logger; - -/** - * provides a model of the main menu bar - * - * @author rfreden - */ -public class MenuBean -{ - private static final Logger log=Logger.getLogger(MenuBean.class); - - private List menu; - - // label, icon, action - // all three null for menu break - // first element is the submenu title - private static final String[][] fileMenu= { { "File", null, null }, - { "Print Screen", "/images/PrintScreen16.gif", null }, - { "Screen Shot", "/images/ScreenShot16.gif", null }, - { "Report", "/images/Report16.gif", null }, { "Print", "/images/Print16.gif", null }, - { null, null, null }, { "End", "/images/End16.gif", null }, - { "Exit", "/images/Exit16.gif", null } }; - - private static final String[][] editMenu= { { "Edit", null, null }, - { "New Record", "/images/New16.gif", null }, { "Save", "/images/Save16.gif", null }, - { null, null, null }, { "Copy Record", "/images/Copy16.gif", null }, - { "Delete Record", "/images/Delete16.gif", null }, - { "Undo Changes", "/images/Undo16.gif", null }, - { "Requery", "/images/Refresh16.gif", null }, { null, null, null }, - { "Look Up Record", "/images/Find16.gif", null } }; - - private static final String[][] viewMenu= { { "View", null, null }, - { "Product Info", "/images/Product16.gif", null }, - { "Business Partner Info", "/images/BPartner16.gif", null }, - { "Account Info", "/images/InfoAccount16.gif", null }, - { "Schedule Info", "/images/InfoSchedule16.gif", null }, { null, null, null }, - { "Order Info", "/images/Info16.gif", null }, - { "Invoice Info", "/images/Info16.gif", null }, - { "Shipment Info", "/images/Info16.gif", null }, - { "Payment Info", "/images/Info16.gif", null }, - { "Cash Journal Info", "/images/Info16.gif", null }, - { "Resource Info", "/images/Info16.gif", null }, - { "Asset Info", "/images/Info16.gif", null }, { null, null, null }, - { "Attachment", "/images/Attachment16.gif", null }, - { "History Records", "/images/History16.gif", null }, { null, null, null }, - { "Grid Toggle", "/images/Multi16.gif", null } }; - - private static final String[][] goMenu= { { "Go", null, null }, - { "First Record", "/images/First16.gif", null }, - { "Previous Record", "/images/Previous16.gif", null }, - { "Next Record", "/images/Next16.gif", null }, - { "Last Record", "/images/Last16.gif", null }, { null, null, null }, - { "Parent Record", "/images/Parent16.gif", null }, - { "Detail Record", "/images/Detail16.gif", null }, { null, null, null }, - { "Zoom Across (Where Used)", "/images/ZoomAcross16.gif", null }, - { "Check Requests", "/images/Request16.gif", null }, - { "Archived Documents/Reports", "/images/Archive16.gif", null }, - { "Menu", "/images/Home16.gif", null } }; - - private static final String[][] toolsMenu= { { "Tools", null, null }, - { "Calculator", "/images/Calculator16.gif", null }, - { "Calendar", "/images/Calendar16.gif", null }, - { "Editor", "/images/Editor16.gif", null }, { "Script", "/images/Script16.gif", null }, - { "Active Workflows", "/images/WorkFlow16.gif", null }, { null, null, null }, - { "Preference", "/images/Preference16.gif", null } }; - - private static final String[][] helpMenu= { { "Help", null, null }, - { "Help", "/images/Help16.gif", null }, { "Online", "/images/Online16.gif", null }, - { "Email Support", "/images/EMailSupport16.gif", null }, - { "About", "/images/About16.gif", null } }; - - /** Creates a new instance of MenuBean */ - public MenuBean() - { - menu=new ArrayList(); - menu.add(getNavigationItemListFromArray(fileMenu)); - menu.add(getNavigationItemListFromArray(editMenu)); - menu.add(getNavigationItemListFromArray(viewMenu)); - menu.add(getNavigationItemListFromArray(goMenu)); - menu.add(getNavigationItemListFromArray(toolsMenu)); - menu.add(getNavigationItemListFromArray(helpMenu)); - } - - public List getMenu() - { - return menu; - } - - private NavigationMenuItem getNavigationItemListFromArray(String[][] sa) - { - NavigationMenuItem root=new NavigationMenuItem(sa[0][0], sa[0][2], sa[0][1], false); - List tmp=new ArrayList(); - for (int i=1; i, for windowNo and tab state string - * but... this class should be the only interface to that (currently there is an el expression that looks like #{sessionScope.tabNo[windowNo]} ) - * this object is _only valid for the windowNo it is instantiated from_ - * the class furthermore should be the interface to windowNo, which is a request parameter - * @author rfreden - * - */ -public class TabStateManager -{ - private static final CLogger log=CLogger.getCLogger(TabStateManager.class); - - // the map should be a non clobberable singleton - private static Map tabNo; - - private FacesContext facesContext; - - public TabStateManager(FacesContext fc) - { - facesContext=fc; - if(tabNo==null) - { - // if it doesn't exist in the session, then instantiate it and put it there - if((tabNo=(Map)facesContext.getExternalContext().getSessionMap().get("tabNo"))==null) - { - tabNo=new HashMap(); - facesContext.getExternalContext().getSessionMap().put("tabNo",tabNo); - } - } - } - - public UIStateBean getUIState() - { - return (UIStateBean)facesContext.getApplication().getVariableResolver().resolveVariable(facesContext,"uiStateBean"); - } -} diff --git a/serverApps/src/main/servlet/org/compiere/jsf/UIStateBean.java b/serverApps/src/main/servlet/org/compiere/jsf/UIStateBean.java deleted file mode 100755 index 9de96fbc16..0000000000 --- a/serverApps/src/main/servlet/org/compiere/jsf/UIStateBean.java +++ /dev/null @@ -1,100 +0,0 @@ -/****************************************************************************** - * Product: Adempiere ERP & CRM Smart Business Solution * - * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. * - * 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. * - * For the text or an alternative of this public license, you may reach us * - * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA * - * or via info@compiere.org or http://www.compiere.org/license.html * - *****************************************************************************/ -package org.compiere.jsf; - -import java.io.Serializable; - -import javax.faces.context.FacesContext; -import javax.faces.event.ActionEvent; - -import org.compiere.util.CLogger; - -/** - * holds state for a window; currently it tracks only the windowNo attribute, provided on initial load - * an instance of this class should be available for any window page, as it is persisted throughout the view existence via t:saveState - * @author rfreden - * - */ -public class UIStateBean implements Serializable -{ - private static final long serialVersionUID=2930846164351L; - - private static final CLogger log=CLogger.getCLogger(UIStateBean.class); - - // TODO: this should be an Integer - private String windowNo; - - private boolean gridView; - - private int tabNo; - - public UIStateBean() - { - // int and boolean default initializers put this initial state at tab0Detail - String[] s=(String[])FacesContext.getCurrentInstance().getExternalContext().getRequestParameterValuesMap().get("windowNo"); - if(s!=null) - { - windowNo=s[0]; - log.info("got windowNo "+windowNo); - } - } - - public void setWindowNo(String w) - { - log.info("setting windowNo "+w); - windowNo=w; - } - - public String getWindowNo() - { - //log.info("getting windowNo "+windowNo); - return windowNo; - } - - public Boolean getGridView() - { - return gridView; - } - - public void setGridView(Boolean b) - { - gridView=b; - } - - public Integer getTabNo() - { - return tabNo; - } - - public void setTabNo(Integer i) - { - tabNo=i; - } - - public String getTabState() - { - String s="tab"+String.valueOf(tabNo)+(gridView?"Table":"Detail"); - log.info("returning "+s); - return s; - } - - public void toggleGridView(ActionEvent ae) - { - log.info("called"); - gridView=!gridView; - } -} diff --git a/serverApps/src/war/WEB-INF/web.xml b/serverApps/src/war/WEB-INF/web.xml deleted file mode 100644 index cfa81f5a22..0000000000 --- a/serverApps/src/war/WEB-INF/web.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - jsfFilter - org.compiere.webApp.JSFFilter - - - jsfFilter - /window/* - - \ No newline at end of file diff --git a/serverApps/src/war/css/adempiere.css b/serverApps/src/war/css/adempiere.css deleted file mode 100644 index 76e389c2ea..0000000000 --- a/serverApps/src/war/css/adempiere.css +++ /dev/null @@ -1,730 +0,0 @@ -/***********************************************/ -/* HTML tag styles */ -/********************************************** */ - -body{ - font-family: Arial, sans-serif; - color: #000000; - line-height: normal; - margin: 0px; - padding: 0px; - background-image: url(../images/page_bkgd3.jpg); - background-color: #fbf8f1; - background-repeat: repeat-x; -} -a{ - color: #006699; - text-decoration: none; -} -a:link{ - color: #006699; - text-decoration: none; - font-weight: normal; -} -a:visited{ - color: #006699; - font-weight: normal; - text-decoration: none; -} -a:hover{ - color: #006699; - text-decoration: underline; -} -h1, h2, h3, h4, h5, h6, h7 { - font-family: Arial,sans-serif; - margin: 0px; - padding: 0px; -} -ul{ - list-style-type: square; - list-style-position: inside; - margin-right: 10px; -} -ul ul{ - list-style-type: disc; -} -ul ul ul{ - list-style-type: none; -} -label{ - color: #333333; - font-family: Arial,sans-serif; - font-size: 80%; -} -ol{ - list-style-position: inside; - margin-right: 10px; -} -img{ -text-decoration: none; -} -/***********************************************/ -/* Layout Divs */ -/***********************************************/ - -/************** #container div styles ************* */ -#indexProductbar{ - padding: 0px; - background-color: #FFFFFF; - width: 160px; - float: left; -} -#content{ - float:right; - width: 596px; - margin: 0px 0px 0px 0px; - color:#333333; - padding: 0px 0px 0px 0px; -} -#indexContent{ - width: 419px; - margin: 0px 0px 0px 0px; - color:#333333; - padding: 0px 0px 0px 0px; - background-color: #FFFFFF; - float: left; -} -#fullcontent{ - width: 760px; - margin: 0px 0px 0px 0px; - color:#333333; - padding: 0px 0px 0px 0px; -} -#leftPod{ - float: left; - margin: 0px; - padding: 0px; - background-repeat: no-repeat; - height: 320px; - width: 160px; - background-image: url(/images/adempiere_guy.jpg); -} -#leftPod2{ - width: 127px; - margin: 0px; - padding: 7px 0px 0px 2px; - background-image: url(../images/title_bkgd.jpg); - height: 23px; - float: left; - border-left: solid #CCCCCC 1px; - border-right: solid #CCCCCC 1px; - border-top: solid #CCCCCC 1px; -} -#leftPod3{ - width: 129px; - padding: 0px 0px 0px 0px; - text-align: center; - float: left; - border-right: solid #CCCCCC 1px; - border-left: solid #CCCCCC 1px; -} -#leftPod4{ - float: none; - margin: 0px; - padding: 0px; - width: 129px; - background-color: #FFFFFF; -} -#rightPod{ - float:right; - width: 100%; - border-left: 1px solid #cccccc; - border-bottom: 1px solid #cccccc; -} -#rightPod2{ - float:none; - width: 160px; - background-image: url(../images/title_bkgd.jpg); - height: 23px; - text-align: left; - padding: 7px 0px 0px 0px; - background-repeat: no-repeat; -} -#rightPod3{ - float:none; - width: 158px; - text-align: center; - margin: 0px 0px 0px 0px; - background-color: #FFFFFF; -} -#rightPod5{ - float:none; - width: 158px; - text-align: center; - margin: 0px 0px 0px 0px; - background-color: #FFFFFF; - height: 280px; - padding-top: 25px; -} -/************** #topNav styles ************* */ -#topNav{ - position: relative; - top: 4px; - height: 22px; - padding: 0px; - margin: -95px 0px 0px 400px; - left: 5px; - width: 350px; - text-align: right; - font-size: 60%; - vertical-align: middle; -} -#topLink{ - position: relative; - top: 4px; - height: 22px; - padding: 0px; - margin: 0px; - left: 190px; - width: 500px; -} -a.toplink, a.toplink:visited{ - color: #003366; - font-weight: bold; - margin: 0px; - padding: 2px 5px 4px 5px; - text-decoration: none; - border-right-width: 1px; - border-right-style: solid; - border-right-color: #999999; -} -a.toplink:hover{ - color: #003366; - font-weight: bold; - text-decoration: underline; -} -a.alttoplink, a.alttoplink:visited{ - color: #003366; - font-weight: bold; - margin: 0px; - padding: 2px 5px 4px 5px; - text-decoration: none; -} -a.alttoplink:hover{ - color: #003366; - font-weight: bold; - text-decoration: underline; -} - -/************* #globalNav styles ************* */ - -#globalNav{ - color: #003366; - white-space: nowrap; - background-image: url(../images/navbar_adempiere.jpg); - background-repeat: no-repeat; - font-family: Arial, Helvetica, sans-serif; - height: 28px; - width: 100%; -} -#globalNav img{ - display: block; -} -#globalNav a { - font-size: 90%; - padding: 0 4px 0 0; -} -#globalLink{ - position: relative; - top: 4px; - height: 22px; - padding: 0px; - margin: 0px; - left: 190px; - width: 400px; -} -a.glink, a.glink:visited{ - font-size: small; - color: #99FFFF; - font-weight: bold; - margin: 0px; - padding: 2px 5px 4px 5px; - text-decoration: none; - border-right-width: 0px; - border-right-style: solid; - border-right-color: #999999; -} -a.glink:hover{ - color: #FFFFFF; - text-decoration: none; -} -a.altlink, a.altlink:visited{ - font-size: small; - color: #99FFFF; - font-weight: bold; - margin: 0px; - padding: 2px 5px 4px 5px; - text-decoration: none; -} -a.altlink:hover{ - color: #FFFFFF; - text-decoration: none; -} - -/************** #tabNav styles ************* */ - -#tabNav{ - position: relative; - padding: -10px 0px 5px 20px; - margin: 0px; - left: 25px; - width: 520px; -} -a.tabNav, a.tabNav:visited{ - color: #ffffff; - font-weight: bold; - margin: 0px; - padding: 2px 5px 4px 5px; - text-decoration: underline; -} -a.tabNav:hover{ - color: #ffffff; - font-weight: bold; - text-decoration: underline; -} -/************** Header styles ************* */ -#masthead{ - width: 100%; - border-bottom: 1px solid #cccccc; -} -#header{ - font-family: Arial, Helvetica, sans-serif; - height: 94px; - width: 100%; - margin: 0; - background-color: #0099CC; - background-image: url(../images/adempiere_5a.jpg); - background-repeat: no-repeat; - - font-weight: bolder; - } -#logoHeader{ - font-family: Arial, Helvetica, sans-serif; - height: 94px; - width: 100%; - z-index: 10; -} -#navBar{ - padding: 0px; - background-color: #eeeeee; - width: 159px; -} -#fullheightcontainer{ - margin-left:auto; - margin-right:auto; - position:inherit; - width:760px; - height:100%; - background-color: #FFFFFF; -} -#wrapper{ - min-height:100%; - height:100%; - background:#FFFFFF; -} -#wrapp\65 r{ - height:auto; -} -* html #wrapper{ - height:100%; - width: 760px; - background-color: #FFFFFF; -} -#outer{ - z-index:1; - position:relative; - margin-left:160px; - width:440px; - background:#FFFFFF; - height:100%; -} -/***********************************************/ -/* Components */ -/***********************************************/ - -/*************** title styles ************* */ -#index1{ - text-align: center; - background-color: #FFFFFF; - color: #003366; - font-weight: bolder; - font-size: 1.2em; - height: auto; - padding-top: 10px; -} -#index2{ - text-align: right; - background-color: #FFFFFF; - color: #0099cc; - font-weight: bold; - font-size: .9em; - padding-right: 10px; - height: auto; - margin-top: 0px; -} -#index3{ - text-align: left; - color: #003366; - font-weight: bold; - font-size: 1.0em; -} -#pageName{ - margin: 25px 0px 0px 5px; - padding: 0px 0px 0px 20px; - color: #003366; - font-size: 150%; -} -#pageNameimg{ - margin: 5px 0px 20px 25px; - padding: 0px 0px 0px 0px; -} -#sectionTitle{ - font-weight: bold; - color: #003366; - margin: 0px 0px 0px 0px; - padding: 10px 0px 10px 10px; -} -#sectionTitle2{ - font-size: 90%; - font-weight: bold; - color: #003366; - margin: 0px 0px 0px 0px; - padding: 5px 0px 10px 0px; -} -#storyTitle1{ - font-size: 115%; - font-weight: bold; - color: #003366; - margin: 20px 10px 10px 25px; - padding: 0px; -} -#storyTitle2{ - font-size: 105%; - font-weight: bold; - color: #333333; - margin: 0px 0px 10px 30px; - padding: 0px; -} -#storyTabletitle1{ - font-size: 105%; - font-weight: bold; - color: #333333; - margin: 0px 0px 5px 15px; - padding: 0px; -} -#storyTabletitle2{ - font-size: 115%; - font-weight: bold; - color: #003366; - margin: 0px 0px 10px 0px; - padding: 0px; -} -#dynamicTitle{ - font-size: 100%; - font-weight: bolder; - color: #333333; - margin: 0px 0px 0px 0px; - padding: 0px 0px 0px 3px; -} -#siteMap1{ - font-size: 120%; - font-weight: bold; - color: #006699; - margin: 20px 15px 10px 25px; - padding: 0px; -} -#siteMap2{ - font-size: 90%; - font-weight: bold; - color: #006699; - margin: 0px 0px 5px 40px; - padding: 0px; - font-style: normal; -} -#aboutNav{ - position: relative; - top: 4px; - height: 22px; - padding: 4px 0px 0px 0px; - margin: 2px 0px 8px 0px; - width: 410px; - text-align: center; - font-size: 90%; - vertical-align: middle; -} -a.aboutNav, a.aboutNav:visited{ - font-weight: bold; - margin: 0px; - padding: 2px 5px 4px 5px; - text-decoration: underline; -} -a.aboutNav:hover{ - font-weight: bold; - text-decoration: underline; -} -/************* #breadCrumb styles *************/ - -#breadCrumb{ - font-size: 70%; - margin: 5px 0px 0px 20px; -} - - -/************** .centerPod styles ***************/ - -.centerPod{ - padding: 0px 0px 0px 0px; - font-size: 0.91em; - background-color: #FFFFFF; - margin: 0px 0px 0px 0px; -} -.centerPod2{ - background-image: url(../images/title_bkgd.jpg); - height: 31px; -} -.centerPod3{ -} -/************** .story styles *****************/ - -.story{ - font-size: 80%; - width: 100%; -} -.story p{ - padding: 0px 0px 10px 0px; - margin: 0px 20px 0px 35px; -} -#storyImg{ - margin: 10px 10px 10px 30px; - text-align: center; -} -.story a{ - text-decoration:underline -} -.story a:visited{ - text-decoration:underline -} -.story a:hover{ - text-decoration: underline; -} -#storySidebar{ - float:right; - width: 158px; - text-align: left; - margin: 0px 1px 10px 10px; - background-color: #FFFFFF; - border: 1px solid #cccccc; -} -/************** .webStore styles *****************/ -#webStorecontent{ - float:right; - width: 750px; - margin: 0px 0px 0px 0px; - color:#333333; - padding: 0px 10px 0px 0px; -} -.webStore{ - font-size: 80%; - width: 100%; -} -.webStore p{ - padding: 0px 0px 10px 0px; - margin: 0px 20px 0px 35px; -} -/************* #siteInfo styles ***************/ - -#siteInfo{ - clear: both; - font-size: 75%; - color: #999999; - padding: 5px 5px 5px 5px; - text-align: center; - border-top: 1px solid #cccccc; -} - -/************* #search styles ***************/ - -#search{ - padding: 5px 0px 5px 10px; - font-size: 90%; - margin-top: -24px; - margin-left: 596px; -} -#search form{ - margin: 0px; - padding: 0px; -} -#search label{ - display: block; - margin: 0px; - padding: 0px; -} -#searchStore{ - padding: 5px 0px 5px 10px; - font-size: 90%; - margin-top: -24px; - margin-left: 30px; -} -/*********** #navBar link styles ***********/ - -#navBar ul a:link, #navBar ul a:visited{ -display: block; -} -#navBar ul { -list-style: none; margin: 0; padding: 0; -} -#navBar li {border-bottom: 1px solid #EEE;} -html>body #navBar li {border-bottom: none;} - -/*********** leftNav styles ***********/ - -#sectionLinks{ - position: relative; - margin: 0px; - padding: 0px; - font-size: 88%; - border-right: 1px solid #cccccc; - border-bottom: 1px solid #cccccc; -} -#sectionLinks h3{ - padding: 10px 0px 2px 10px; -} -#sectionLinks a:link{ - padding: 2px 0px 2px 10px; - border-top: 1px solid #cccccc; - width: auto; - voice-family: "\"}\""; - voice-family:inherit; - width: auto; -} -#sectionLinks a:visited{ - border-top: 1px solid #cccccc; - padding: 2px 0px 2px 10px; -} -#sectionLinks a:hover{ - border-top: 1px solid #cccccc; - background-color: #dddddd; - padding: 2px 0px 2px 10px; -} -#lnavFade{ - width: 160px; - border: 0px; - height: 100px; - background-color: #FFFFFF; - background-image: url(../images/lnav_fade.jpg); -} -/*********** #login styles ***********/ -#login{ - position: relative; - margin: 0px; - padding: 10px 0px 10px 10px; - background-color: #FFFFFF; - border-right: 1px solid #cccccc; -} -#loginNew{ - font-family: Arial, sans-serif; - color: #FF0000; - font-size: 80%; - text-align: left; - background-color: #FFFFFF; - padding: 10px 0px 10px 10px; - border-right: 1px solid #cccccc; -} - -/*********** #subscribe styles ***********/ -#subscribe{ - text-align: left; - background-color: #eeeeee; - padding: 10px 0px 10px 10px; - border-right: 1px solid #cccccc; - border-top: 1px solid #cccccc; -} -#subscribeLink{ - font-family: Arial, sans-serif; - color: #FF0000; - font-size: 90%; - padding-right: 5px; -} -#subscribeLink ul a:link, #navBar ul a:visited, #navBar ul a:link{ - display: block; - color: #006699; -} -#subscribeLink ul { -list-style: none; margin: 0; padding: 0; -} -#subscribeLink li {border-bottom: 1px solid #EEE;} -html>body #subscribeLink li {border-bottom: none;} -/*********** .relatedLinks styles ***********/ - -.relatedLinks{ - position: relative; - margin: 0px; - padding: 0px 0px 10px 10px; - font-size: 80%; - color: #006699; -} -.relatedLinks h3{ - padding: 10px 0px 2px 0px; -} -.relatedLinks a:link, -.relatedLinks a:visited{ - display: block; - color: #000033; -} -.relatedLinks a:hover { - display: block; - color: #000033; - text-decoration: underline; -} -.sitemapLinks1{ - position: relative; - margin: 0px; - padding: 3px 0px 5px 65px; - font-size: 80%; -} -.sitemapLinks2{ - position: relative; - margin: 0px; - padding: 0px 0px 5px 65px; - font-size: 80%; -} -.sitemapLinks3{ - position: relative; - margin: 0px; - padding: 0px 0px 10px 65px; - font-size: 80%; -} -/************** #headlines styles ************* */ - -#headlines{ - margin: 0px; - padding: 0px 0px 0px 0px; - width: 160px; - float: right; - background-color: #FFFFFF; -} -#headlines2{ - margin: 0px; - padding: 0px 0px 0px 0px; - width: 160px; - float: right; - background-color: #FFFFFF; - border-left: solid #CCCCCC 1px; - border-right: solid #CCCCCC 1px; - border-top: solid #CCCCCC 1px; -} -#headlines3{ - margin: 0px; - padding: 0px 0px 0px 0px; - width: 162px; - float: right; - background-color: #FFFFFF; -} -#headlines p{ - padding: 5px 0px 5px 0px; -} -/************** #table styles ************* */ -#tableText{ - color: #333333; - font-size: 0.7em; -} diff --git a/serverApps/src/war/css/iconToolbar.css b/serverApps/src/war/css/iconToolbar.css deleted file mode 100644 index efd7ce7889..0000000000 --- a/serverApps/src/war/css/iconToolbar.css +++ /dev/null @@ -1,15 +0,0 @@ -.mainDocumentStyle { - background-color: #cfcfcf; -} - -/* used in toolbar buttons */ -.iconButtonStyle { - background-color: #cfcfcf; - border: 3px groove #e0e0e0; - margin: 0px; -} - -.rightLabel { - text-align: right; - white-space: nowrap; -} diff --git a/serverApps/src/war/css/tab.css b/serverApps/src/war/css/tab.css deleted file mode 100644 index 172912ce1f..0000000000 --- a/serverApps/src/war/css/tab.css +++ /dev/null @@ -1,45 +0,0 @@ -/* -if you could do multiple inheritance in css this would be perfect for it - not every aspect of this setup is as styled as it should be; - the buttons aren't properly squished together -*/ - -.baseParentTabStyle { - background-color: inherit; - width: 100px; -} - -/* indented child style tab button */ -.baseChildTabStyle { - background-color: inherit; - width: 85px; -} - -.selectedTabStyle { - border-left: 2px inset; - border-top: 2px inset; - border-bottom: 2px inset; - border-right: none; -} - -.unselectedTabStyle { - border: 2px outset; -} - -/* inherits from selectedTabStyle */ -.selectedMouseOverTabStyle { - color: WHITE; - border-left: 2px inset BLACK; - border-top: 2px inset BLACK; - border-bottom: 2px inset BLACK; - border-right: none; -} - -.unselectedMouseOverTabStyle { - color: WHITE; - border: 2px outset BLACK; -} - -.thing { - padding-left: 15px; -} diff --git a/serverApps/src/war/css/wideTable.css b/serverApps/src/war/css/wideTable.css deleted file mode 100644 index c287581932..0000000000 --- a/serverApps/src/war/css/wideTable.css +++ /dev/null @@ -1,21 +0,0 @@ -.wideTableStyle { - table-layout: fixed; - border-style: solid; - border-width: 1px; -} - -.wideTableHeaderStyle { - white-space: nowrap; - border-right: solid; - border-left: solid; - border-width: 1px; -} -wideTableRowStyle { - border-style: solid; - border-width: 1px; -} - -.wideTableCellStyle { - border-style: solid; - border-width: 1px; -} diff --git a/serverApps/src/war/javaScript/aa.js b/serverApps/src/war/javaScript/aa.js deleted file mode 100644 index 93901abdeb..0000000000 --- a/serverApps/src/war/javaScript/aa.js +++ /dev/null @@ -1,764 +0,0 @@ -/* -Copyright 2005 Vitaliy Shevchuk (shevit@users.sourceforge.net) - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -*/ - -AjaxAnywhere.defaultInstanceName = "default"; - -// constructor; -function AjaxAnywhere() { - - this.id = AjaxAnywhere.defaultInstanceName; - this.formName = null; - this.notSupported = false; - this.delayBeforeContentUpdate = true; - this.delayInMillis = 100; - - if (window.XMLHttpRequest) { - this.req = new XMLHttpRequest(); - } else if (window.ActiveXObject) { - try { - this.req = new ActiveXObject("Msxml2.XMLHTTP"); - } catch(e) { - try { - this.req = new ActiveXObject("Microsoft.XMLHTTP"); - } catch(e1) { - this.notSupported = true; - /* XMLHTTPRequest not supported */ - } - } - } - - if (this.req == null || typeof this.req == "undefined") - this.notSupported = true; -} - -/** -* Stores substitutes SubmitButton names in to redo sustitution if a button was eventually inside a refresh zone. -*/ -AjaxAnywhere.prototype.substitutedSubmitButtons = new Array(); -AjaxAnywhere.prototype.substitutedSubmitButtonsInfo = new Object(); - -/** -* Returns a Form object that corresponds to formName property of this AjaxAnywhere class instance. -*/ -AjaxAnywhere.prototype.findForm = function () { - var form; - if (this.formName != null) - form = document.forms[this.formName]; - else if (document.forms.length > 0) - form = document.forms[0]; - - if (typeof form != "object") - alert("AjaxAnywhere error: Form with name [" + this.formName + "] not found"); - return form; -} - - -/** -* Binds this instance to window object using "AjaxAnywhere."+this.id as a key. -*/ -AjaxAnywhere.prototype.bindById = function () { - var key = "AjaxAnywhere." + this.id; - window[key] = this; -} - -/** -* Finds an instance by id. -*/ -AjaxAnywhere.findInstance = function(id) { - var key = "AjaxAnywhere." + id; - return window[key]; -} - -/** -* This function is used to submit all form fields by AJAX request to the server. -* If the form is submited with <input type=submit|image>, submitButton should be a reference to the DHTML object. Otherwise - undefined. -*/ -AjaxAnywhere.prototype.submitAJAX = function(additionalPostData, submitButton) { - - if (this.notSupported) - return this.onSubmitAjaxNotSupported(additionalPostData, submitButton); - - if (additionalPostData == null || typeof additionalPostData == "undefined") - additionalPostData = ""; - - this.bindById(); - - var form = this.findForm(); - - var actionAttrNode = form.attributes["action"].nodeValue; - var url = actionAttrNode == null?null:actionAttrNode.nodeValue; - if ((url == null) || (url == "")) - url = location.href; - - var pos = url.indexOf("#"); - if (pos!=-1) - url = url.substring(0,pos); - if ((url == null) || (url == "")) - url = location.href; - pos = url.indexOf("#"); - if (pos!=-1) - url = url.substring(0,pos); - - var zones = this.getZonesToReload(url, submitButton); - - if (zones == null) { - // submit in tradiditional way : - this.submitOld(form,submitButton) - return; - } - - this.dropPreviousRequest(); - - this.req.open("POST", url, true); - this.req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); - this.req.setRequestHeader("Accept", "text/xml"); - - var postData = this.preparePostData(submitButton); - - if (zones != "") - postData = '&aazones=' + encodeURIComponent(zones) + "&" + postData + "&" + additionalPostData; - else - postData += "&" + additionalPostData; - - this.sendPreparedRequest(postData); - -} -/** -* sends a GET request to the server. -*/ -AjaxAnywhere.prototype.getAJAX = function(url, zonesToRefresh) { - if (this.notSupported) - return this.onGetAjaxNotSupported(url); - - this.bindById(); - - if (zonesToRefresh == null || typeof zonesToRefresh == "undefined") - zonesToRefresh = ""; - var urlDependentZones = this.getZonesToReload(url); - if (urlDependentZones == null) { - location.href = url; - return; - } - - if (urlDependentZones.length != 0) - zonesToRefresh += "," + urlDependentZones; - - this.dropPreviousRequest(); - - url += (url.indexOf("?") != -1) ? "&" : "?"; - - url += "aaxmlrequest=true&aa_rand=" + Math.random(); - // avoid caching - - if (zonesToRefresh != null && zonesToRefresh != "") - url += '&aazones=' + encodeURIComponent(zonesToRefresh); - - this.req.open("GET", url, true); - this.req.setRequestHeader("Accept", "text/xml"); - - this.sendPreparedRequest(""); -} - -/** -* @private -*/ -AjaxAnywhere.prototype.sendPreparedRequest = function (postData) { - var callbackKey = this.id + "_callbackFunction"; - if (typeof window[callbackKey] == "undefined") - window[callbackKey] = new Function("AjaxAnywhere.findInstance(\"" + this.id + "\").callback(); "); - this.req.onreadystatechange = window[callbackKey]; - - this.showLoadingMessage(); - - this.req.send(postData); -} -/** -* Used internally by AjaxAnywhere. Aborts previous request if not completed. -*/ -AjaxAnywhere.prototype.dropPreviousRequest = function() { - if (this.req.readyState != 0 && this.req.readyState != 4) { - // abort previous request if not completed - this.req.abort(); - this.handlePrevousRequestAborted(); - } -} - -/** -* Internally used to prepare Post data. -* If the form is submited with <input type=submit|image>, submitButton is a reference to the DHTML object. Otherwise - undefined. -*/ -AjaxAnywhere.prototype.preparePostData = function(submitButton) { - var form = this.findForm(); - var result = "&aaxmlrequest=true"; - for (var i = 0; i < form.elements.length; i++) { - var el = form.elements[i]; - if (el.tagName.toLowerCase() == "select") { - for (var j = 0; j < el.options.length; j++) { - var op = el.options[j]; - if (op.selected) - result += "&" + encodeURIComponent(el.name) + "=" + encodeURIComponent(op.value); - } - } else if (el.tagName.toLowerCase() == "textarea") { - result += "&" + encodeURIComponent(el.name) + "=" + encodeURIComponent(el.value); - } else if (el.tagName.toLowerCase() == "input") { - if (el.type.toLowerCase() == "checkbox" || el.type.toLowerCase() == "radio") { - if (el.checked) - result += "&" + encodeURIComponent(el.name) + "=" + encodeURIComponent(el.value); - } else if (el.type.toLowerCase() == "submit") { - if (el == submitButton) // is "el" the submit button that fired the form submit? - result += "&" + encodeURIComponent(el.name) + "=" + encodeURIComponent(el.value); - } else if (el.type.toLowerCase() != "button") { - result += "&" + encodeURIComponent(el.name) + "=" + encodeURIComponent(el.value); - } - } - } - if (typeof submitButton != 'undefined' && submitButton != null && submitButton.type.toLowerCase() == "image") { - if (submitButton.name == null || submitButton.name == "" || typeof submitButton.name == "undefined") - result += "&x=1&y=1"; // .x and .y coordinates calculation is not supported. - else - result += "&" + encodeURIComponent(submitButton.name) + ".x=1&" + - encodeURIComponent(submitButton.name) + ".y=1"; - } - return result; -} - -/** -* Pauses the thread of execution for the specified number of milliseconds -* @private -*/ -function delay(millis) { - date = new Date(); - var curDate = null; - do { - curDate = new Date(); - } - while (curDate - date < millis); -} - -/** -* A callback. internally used -*/ -AjaxAnywhere.prototype.callback = function() { - - if (this.req.readyState == 4) { - - this.onBeforeResponseProcessing(); - this.hideLoadingMessage(); - - if (this.req.status == 200) { - - if (this.req.getResponseHeader('content-type').toLowerCase().substring(0, 8) != 'text/xml') - alert("AjaxAnywhere error : content-type in not text/xml : [" + this.req.getResponseHeader('content-type') + "]"); - - var docs = this.req.responseXML.getElementsByTagName("document"); - var redirects = this.req.responseXML.getElementsByTagName("redirect"); - var zones = this.req.responseXML.getElementsByTagName("zone"); - var exceptions = this.req.responseXML.getElementsByTagName("exception"); - var scripts = this.req.responseXML.getElementsByTagName("script"); - var images = this.req.responseXML.getElementsByTagName("image"); - - if (redirects.length != 0) { - var newURL = redirects[0].firstChild.data; - location.href = newURL; - } - if (docs.length != 0) { - var newContent = docs[0].firstChild.data; - - //cleanup ressources - delete this.req; - - document.close(); - document.write(newContent); - document.close(); - } - - if (images.length != 0) { - var preLoad = new Array(images.length); - for (var i = 0; i < images.length; i++) { - var img = images[i].firstChild; - if (img != null) { - preLoad[i] = new Image(); - preLoad[i].src = img.data; - } - } - if (this.delayBeforeContentUpdate) { - delay(this.delayInMillis); - } - } - - if (zones.length != 0) { - for (var i = 0; i < zones.length; i++) { - var zoneNode = zones[i]; - - var name = zoneNode.getAttribute("name"); - var id = zoneNode.getAttribute("id"); - - var fc = zoneNode.firstChild; - - var html = (fc == null)?"":fc.data; - - var zoneHolder = name!=null? - document.getElementById("aazone." + name): - document.getElementById(id); - - if (zoneHolder != null && typeof(zoneHolder) != "undefined") { - zoneHolder.innerHTML = html; - } - - } - } - if (exceptions.length != 0) { - var e = exceptions[0]; - var type = e.getAttribute("type"); - var stackTrace = e.firstChild.data; - this.handleException(type, stackTrace); - } - - if (scripts.length != 0) { - for (var $$$$i = 0; $$$$i < scripts.length; $$$$i++) { - // use $$$$i variable to avoid collision with "i" inside user script - var script = scripts[$$$$i].firstChild; - if (script != null) { - script = script.data; - if (script.indexOf("document.write") != -1) { - this.handleException("document.write", "This script contains document.write(), which is not compatible with AjaxAnywhere : \n\n" + script); - } else { - eval(script); - } - } - } - - var globals = this.getGlobalScriptsDeclarationsList(script); - if (globals != null) - for (var i in globals) { - var objName = globals[i]; - try { - window[objName] = eval(objName); - } catch(e) { - } - } - } - - } else { - if (this.req.status != 0) - this.handleHttpErrorCode(this.req.status); - } - this.restoreSubstitutedSubmitButtons(); - this.onAfterResponseProcessing(); - - } - - -} - -/** -* Default sample loading message show function. Overrride it if you like. -*/ -AjaxAnywhere.prototype.showLoadingMessage = function() { - - var div = document.getElementById("AA_" + this.id + "_loading_div"); - if (div == null) { - div = document.createElement("DIV"); - - document.body.appendChild(div); - div.id = "AA_" + this.id + "_loading_div"; - - div.innerHTML = " Loading..."; - div.style.position = "absolute"; - div.style.border = "1 solid black"; - div.style.color = "white"; - div.style.backgroundColor = "blue"; - div.style.width = "100px"; - div.style.heigth = "50px"; - div.style.fontFamily = "Arial, Helvetica, sans-serif"; - div.style.fontWeight = "bold"; - div.style.fontSize = "11px"; - } - div.style.top = document.body.scrollTop + "px"; - div.style.left = (document.body.offsetWidth - 100 - (document.all?20:0)) + "px"; - - div.style.display = ""; -} - -/** -* Default sample loading message hide function. Overrride it if you like. -*/ -AjaxAnywhere.prototype.hideLoadingMessage = function() { - var div = document.getElementById("AA_" + this.id + "_loading_div"); - if (div != null) - div.style.display = "none"; - -} - -/** -* This function is used to facilitatte AjaxAnywhere integration with existing projects/frameworks. -* It substitutes default Form.sumbit(). -* The new implementation calls AjaxAnywhere.isFormSubmitByAjax() function to find out if the form -* should be submitted in traditional way or by AjaxAnywhere. -*/ -AjaxAnywhere.prototype.substituteFormSubmitFunction = function() { - if (this.notSupported) - return; - - this.bindById(); - - var form = this.findForm(); - - form.submit_old = form.submit; - var code = "var ajax = AjaxAnywhere.findInstance(\"" + this.id + "\"); " + - "if (typeof ajax !='object' || ! ajax.isFormSubmitByAjax() ) " + - "ajax.findForm().submit_old();" + - " else " + - "ajax.submitAJAX();" - form.submit = new Function(code); - -} -/** -* Substitutes the default behavior of <input type=submit|image> to submit the form via AjaxAnywhere. -* -* @param {boolean} indicates if existing onClick handlers should be preserved. -* If keepExistingOnClickHandler==true, -* Existing handler will be called first if it returns false, or if event.returnValue==false, AjaxAnywhere will not -* continue form submission. -* If keepExistingOnClickHandler==false or undefines, existing onClick event handlers will be replaced. -* -* @param {Array} list of submitButtons and submitImages names. If the parameter is omitted or undefined, -* all elements will be processed -*/ -AjaxAnywhere.prototype.substituteSubmitButtonsBehavior = function (keepExistingOnClickHandler, elements) { - if (this.notSupported) - return; - - var form = this.findForm(); - if (elements == null || typeof elements == "undefined") { // process all elements - elements = new Array(); - for (var i = 0; i < form.elements.length; i++) { - elements.push(form.elements[i]); - } - - var inputs = document.getElementsByTagName("input"); - for (var i = 0; i < inputs.length; i++) { - var input = inputs[i]; - if (input.type != null && typeof input.type != "undefined" && - input.type.toLowerCase() == "image" && input.form == form) { - elements.push(input); - } - } - - for (var i = 0; i < elements.length; i++) { - var el = elements[i]; - if (el.tagName.toLowerCase() == "input" && (el.type.toLowerCase() == "submit" - || el.type.toLowerCase() == "image")) { - this.substituteSubmitBehavior(el, keepExistingOnClickHandler); - - } - } - } else { //process only specified elements - for (var i = 0; i < elements.length; i++) { - var el = elements[i]; - if (el == null) - continue; - - if (typeof el != "object") - el = form.elements[el]; - - if (typeof el != "undefined") { - if (el.tagName.toLowerCase() == "input" && (el.type.toLowerCase() == "submit" - || el.type.toLowerCase() == "image")) - this.substituteSubmitBehavior(el, keepExistingOnClickHandler); - } - } - } - -} -/** -* Performs a single element behavior substitution -* -* @private -*/ -AjaxAnywhere.prototype.substituteSubmitBehavior = function (el, keepExistingOnClickHandler) { - - var inList = false; - for (var i = 0; i < this.substitutedSubmitButtons.length; i++) { - var btnName = this.substitutedSubmitButtons[i]; - if (btnName == el.name) { - inList = true; - break; - } - } - if (!inList) - this.substitutedSubmitButtons.push(el.name); - - this.substitutedSubmitButtonsInfo[el.name] = keepExistingOnClickHandler; - - if (keepExistingOnClickHandler && (typeof el.onclick != "undefined") && ( el.onclick != null) && ( el.onclick != "")) { - el.AA_old_onclick = el.onclick; - } - - el.onclick = handleSubmitButtonClick; - el.ajaxAnywhereId = this.id; -} - -/** -* -* @private -*/ -AjaxAnywhere.prototype.restoreSubstitutedSubmitButtons = function() { - if (this.substitutedSubmitButtons.length == 0) - return; - - var form = this.findForm(); - - for (var i = 0; i < this.substitutedSubmitButtons.length; i++) { - var name = this.substitutedSubmitButtons[i]; - var el = form.elements[name]; - if (el != null && typeof el != "undefined") { - if (el.onclick != handleSubmitButtonClick) { - var keepExistingOnClickHandler = this.substitutedSubmitButtonsInfo[el.name]; - this.substituteSubmitBehavior(el, keepExistingOnClickHandler); - } - } else { - //input type=image - if (name != null && typeof name != "undefined" && name.length != 0) { - var elements = document.getElementsByName(name); - if (elements != null) - for (var j = 0; j < elements.length; j++) { - el = elements[j]; - if (el != null && typeof el != "undefined" - && el.tagName.toLowerCase() == "input" - && typeof el.type != "undefined" && el.type.toLowerCase() == "image") { - if (el.onclick != handleSubmitButtonClick) { - var keepExistingOnClickHandler = this.substitutedSubmitButtonsInfo[el.name]; - this.substituteSubmitBehavior(el, keepExistingOnClickHandler); - } - } - } - } - } - } -} - -/** -* @private -*/ -function handleSubmitButtonClick(_event) { - - if (typeof this.AA_old_onclick != "undefined") { - if (false == this.AA_old_onclick(_event)) - return false; - if (typeof window.event != "undefined") - if (window.event.returnValue == false) - return false; - } - var onsubmit = this.form.onsubmit; - if (typeof onsubmit == "function") { - if (false == onsubmit(_event)) - return false; - if (typeof window.event != "undefined") - if (window.event.returnValue == false) - return false; - } - AjaxAnywhere.findInstance(this.ajaxAnywhereId).submitAJAX('', this); - - return false; -} -/** -* Override this function if you use AjaxAnywhere.substituteFormSubmitFunction() to -* dynamically inform AjaxAnywhere of the method you want to use for the form submission. -*/ -AjaxAnywhere.prototype.isFormSubmitByAjax = function () { - return true; -} - -/** -* Some browsers (notably IE) do not load images from thier cache when content is updated using -* innerHTML. As a result, each image is re-requested from the server even though the image exists -* in the cache. To work around this issue, AjaxAnywhere preloads images present in the new content -* and intrduces a brief dely (default of 100 milleseconds) before calling innerHTML. -* See http://support.microsoft.com/default.aspx?scid=kb;en-us;319546 for further details. -* This function can be used to change this behaviour. -* @param (boolean) isDelay -*/ -AjaxAnywhere.prototype.setDelayBeforeLoad = function (isDelay) { - this.delayBeforeContentUpdate = isDelay; -} - -/** -* Returns the current delay behavior. -*/ -AjaxAnywhere.prototype.isDelayBeforeLoad = function () { - return this.delayBeforeContentUpdate; -} - -/** -* Sets the delay period in milliseconds. The default delay is 100 milliseconds. -* @param (int) delayMillis -*/ -AjaxAnywhere.prototype.setDelayTime = function (delayMillis) { - this.delayInMillis = delayMillis; -} - -/** -* Returns the delay period in milliseconds. -*/ -AjaxAnywhere.prototype.getDelayTime = function () { - return this.delayInMillis; -} - -/** -* If an exception is throws on the server-side during AJAX request, it will be processed -* by this function. The default implementation is alert(stackTrace); -* Override it if you need. -*/ -AjaxAnywhere.prototype.handleException = function(type, details) { - alert(details); -} -/** -* If an HTTP Error code returned during AJAX request, it will be processed -* by this function. The default implementation is alert(code); -* Override it if you need. -*/ -AjaxAnywhere.prototype.handleHttpErrorCode = function(code) { - var details = confirm("AjaxAnywhere default error handler. XMLHttpRequest HTTP Error code:" + code + " \n\n Would you like to view the response content in a new window?"); - if (details) { - var win = window.open("", this.id + "_debug_window"); - if (win != null) { - win.document.write("" + this.req.responseText); - win.document.close(); - win.focus(); - } else { - alert("Please, disable your pop-up blocker for this site first."); - } - } -} - -/** -* Override it if you need. -*/ -AjaxAnywhere.prototype.handlePrevousRequestAborted = function() { - alert("AjaxAnywhere default error handler. INFO: previous AJAX request dropped") -} - - -/** -* If the HTML received in responce to AJAX request contains JavaScript that defines new -* functions/variables, they must be propagated to the proper context. Override this method -* to return the Array of function/variable names. -*/ -AjaxAnywhere.prototype.getGlobalScriptsDeclarationsList = function(script) { - return null; -} - -/** -* This function should be overridden by AjaxAnywhere user to implement client-side -* determination of zones to reload. -* -* If the form is submited with &lt;input type=submit|image&gt;, submitButton is a reference to the DHTML object. Otherwise - undefined. -* -* @Returns a comma separated list of zones to reload, or "document.all" to reload -* the whole page. Returns null if the request must be sent in traditional way -* -*/ -AjaxAnywhere.prototype.getZonesToReload = function(url, submitButton) { - return this.getZonesToReaload(); - // backward compatibility only -} -/** -* depreceted : wrond spelling : Reaload will be removed in later versions -*/ -AjaxAnywhere.prototype.getZonesToReaload = function(url, submitButton) { - return ""; -} - -/** -* Override this method to implement a custom action -*/ -AjaxAnywhere.prototype.onRequestSent = function () { -}; -/** -* Override this method to implement a custom action -*/ -AjaxAnywhere.prototype.onBeforeResponseProcessing = function () { -}; -/** -* Override this method to implement a custom action -*/ -AjaxAnywhere.prototype.onAfterResponseProcessing = function () { -}; - -/** -* Provides a default implementation from graceful degradation for getAJAX() -* calls location.href=url if XMLHttpRequest is unavailable, reloading the entire page . -*/ -AjaxAnywhere.prototype.onGetAjaxNotSupported = function (url) { - location.href = url; - return false; -}; - -/** -* Provides a default implementation from graceful degradation for submitAJAX() -* calls form.submit() if XMLHttpRequest is unavailable, reloading the entire page -*/ -AjaxAnywhere.prototype.onSubmitAjaxNotSupported = function (additionalPostData, submitButton) { - var form = this.findForm(); - - var actionAttrNode = form.attributes["action"].nodeValue; - var url = actionAttrNode == null?null:actionAttrNode.nodeValue; - var url_backup = url; - if (typeof additionalPostData != 'undefined' && additionalPostData != null) { - url += (url.indexOf("?") != -1) ? "&" : "?"; - url += additionalPostData; - form.attributes["action"].nodeValue= url; - // only POST method allows sending additional - // date by altering form action URL. - form.setAttribute("method", "post"); - } - - this.submitOld(form,submitButton); - - form.attributes["action"].nodeValue= url_backup; - return false; -}; -/** -* submit the form in tradiditional way : -* @private -*/ - -AjaxAnywhere.prototype.submitOld = function (form,submitButton){ - var submitHolder = null; - if (submitButton!=null && typeof submitButton!="undefined"){ - submitHolder = document.createElement("input"); - submitHolder.setAttribute("type","hidden"); - submitHolder.setAttribute("name",submitButton.name); - submitHolder.setAttribute("value",submitButton.value); - form.appendChild(submitHolder); - - } - - if (typeof form.submit_old == "undefined") - form.submit(); - else - form.submit_old(); - - if (submitButton!=null ){ - form.removeChild(submitHolder); - } -} - -// default instance. -ajaxAnywhere = new AjaxAnywhere(); -ajaxAnywhere.bindById(); \ No newline at end of file