/****************************************************************************** * Product: Posterita Ajax UI * * Copyright (C) 2007 Posterita Ltd. 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 * * Posterita Ltd., 3, Draper Avenue, Quatre Bornes, Mauritius * * or via info@posterita.org or http://www.posterita.org/ * *****************************************************************************/ package org.adempiere.webui.editor; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.logging.Level; import org.adempiere.webui.component.Button; import org.adempiere.webui.event.ActionEvent; import org.adempiere.webui.event.ActionListener; import org.compiere.model.GridField; import org.compiere.model.MLookup; import org.compiere.model.MLookupFactory; import org.compiere.util.CLogger; import org.compiere.util.DB; import org.compiere.util.DisplayType; import org.compiere.util.Env; import org.compiere.util.Msg; import org.compiere.util.NamePair; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.Events; /** * This class is based on org.compiere.grid.ed.VButton written by Jorg Janke. * @author Jorg Janke * * Modifications - UI Compatibility * @author ashley */ public class WButtonEditor extends WEditor { private static final String[] LISTENER_EVENTS = {Events.ON_CLICK}; private static final CLogger logger; static { logger = CLogger.getCLogger(WButtonEditor.class); } private String m_text; private boolean m_mandatory; private Object m_value; /** List of Key/Name */ private HashMap<String,String> m_values = null; /** Description as ToolTip */ private MLookup m_lookup; private int AD_Process_ID; private GridField gridfield = null; private ArrayList<ActionListener> actionListeners = new ArrayList<ActionListener>(); public WButtonEditor(GridField gridField) { super(new Button(), gridField); m_text = gridField.getHeader(); AD_Process_ID = gridField.getAD_Process_ID(); gridfield = gridField; init(); } /** * Get AD_Process_ID * @return AD_Process_ID or 0 */ public int getProcess_ID() { return AD_Process_ID; } // getProcess_ID public GridField getGridField() { return gridfield; } private void init() { label.setValue(" "); getComponent().setLabel(gridField.getHeader()); getComponent().setTooltiptext(gridField.getDescription()); String columnName = super.getColumnName(); if (columnName.equals("PaymentRule")) { readReference(195); getComponent().setImage("/images/Payment16.png"); // 29*14 } else if (columnName.equals("DocAction")) { readReference(135); getComponent().setImage("/images/Process16.png"); // 16*16 } else if (columnName.equals("CreateFrom")) { getComponent().setImage("/images/Copy16.png"); // 16*16 } else if (columnName.equals("Record_ID")) { getComponent().setImage("/images/Zoom16.png"); // 16*16 getComponent().setLabel(Msg.getMsg(Env.getCtx(), "ZoomDocument")); } else if (columnName.equals("Posted")) { readReference(234); getComponent().setImage("/images/InfoAccount16.png"); // 16*16 } if (gridField.getColumnName().endsWith("_ID") && !gridField.getColumnName().equals("Record_ID")) { m_lookup = MLookupFactory.get(Env.getCtx(), gridField.getWindowNo(), 0, gridField.getAD_Column_ID(), DisplayType.Search); } else if (gridField.getAD_Reference_Value_ID() != 0) { // Assuming List m_lookup = MLookupFactory.get(Env.getCtx(), gridField.getWindowNo(), 0, gridField.getAD_Column_ID(), DisplayType.List); } } @Override public String getDisplay() { return m_value.toString(); } @Override public Object getValue() { return m_values; } @Override public boolean isMandatory() { return m_mandatory; } @Override public void setMandatory(boolean mandatory) { m_mandatory = mandatory; } @Override public void setValue(Object value) { m_value = value; String text = m_text; // Nothing to show or Record_ID if (value == null || super.getColumnName().equals("Record_ID")) { ; } else if (m_values != null) { text = (String)m_values.get(value); } else if (m_lookup != null) { NamePair pp = m_lookup.get(value); if (pp != null) text = pp.getName(); } getComponent().setLabel(text != null ? text : ""); } @Override public Button getComponent() { return (Button) component; } @Override public boolean isReadWrite() { return getComponent().isEnabled(); } @Override public void setReadWrite(boolean readWrite) { getComponent().setEnabled(readWrite); } public HashMap<String, String> getValues() { return m_values; } // getValues /** * Fill m_Values with Ref_List values * @param AD_Reference_ID reference */ private void readReference(int AD_Reference_ID) { m_values = new HashMap<String,String>(); String SQL; if (Env.isBaseLanguage(Env.getCtx(), "AD_Ref_List")) SQL = "SELECT Value, Name FROM AD_Ref_List WHERE AD_Reference_ID=?"; else SQL = "SELECT l.Value, 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(); while (rs.next()) { String value = rs.getString(1); String name = rs.getString(2); m_values.put(value,name); } rs.close(); pstmt.close(); } catch (SQLException e) { logger.log(Level.SEVERE, SQL, e); } } // readReference public void addActionListener(ActionListener actionListener) { if (!actionListeners.contains(actionListener)) actionListeners.add(actionListener); } @Override public String[] getEvents() { return LISTENER_EVENTS; } public void onEvent(Event event) throws Exception { if (Events.ON_CLICK.equals(event.getName())) { ActionEvent actionEvent = new ActionEvent(this, getColumnName(), Events.ON_CLICK); ActionListener[] listeners = new ActionListener[0]; listeners = actionListeners.toArray(listeners); for (ActionListener evtListener : listeners) { evtListener.actionPerformed(actionEvent); } } } }