www.pudn.com > code_source_compiere_erp_crm_logiciel_java.zip > MFieldVO.java


/****************************************************************************** 
 * The contents of this file are subject to the   Compiere License  Version 1.1 
 * ("License"); You may not use this file except in compliance with the License 
 * You may obtain a copy of the License at http://www.compiere.org/license.html 
 * Software distributed under the License is distributed on an  "AS IS"  basis, 
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for 
 * the specific language governing rights and limitations under the License. 
 * The Original Code is                  Compiere  ERP & CRM  Business Solution 
 * The Initial Developer of the Original Code is Jorg Janke  and ComPiere, Inc. 
 * Portions created by Jorg Janke are Copyright (C) 1999-2001 Jorg Janke, parts 
 * created by ComPiere are Copyright (C) ComPiere, Inc.;   All Rights Reserved. 
 * Contributor(s): ______________________________________. 
 *****************************************************************************/ 
package org.compiere.model; 
 
import java.sql.*; 
import java.util.*; 
import java.io.*; 
 
import org.compiere.util.*; 
 
/** 
 *  Field Model Value Object 
 * 
 *  @author Jorg Janke 
 *  @version  $Id: MFieldVO.java,v 1.14 2003/05/04 06:40:55 jjanke Exp $ 
 */ 
public class MFieldVO implements Serializable 
{ 
	/** 
	 *  Private constructor 
	 *  @param ctx context 
	 *  @param WindowNo window 
	 *  @param TabNo tab 
	 *  @param AD_Window_ID window 
	 *  @param tabReadOnly read only 
	 */ 
	private MFieldVO (Properties ctx, int WindowNo, int TabNo, int AD_Window_ID, boolean tabReadOnly) 
	{ 
		this.ctx = ctx; 
		this.WindowNo = WindowNo; 
		this.TabNo = TabNo; 
		this.AD_Window_ID = AD_Window_ID; 
		this.tabReadOnly = tabReadOnly; 
	}   //  MFieldVO 
 
	/** Context                     */ 
	public Properties   ctx = null; 
	/** Window No                   */ 
	public int          WindowNo; 
	/** Tab No                      */ 
	public int          TabNo; 
	/** AD_Winmdow_ID               */ 
	public int          AD_Window_ID; 
	/** Is the Tab Read Only        */ 
	public boolean      tabReadOnly = false; 
 
	/** Is Process Parameter        */ 
	public boolean      isProcess = false; 
 
	//  Database Fields 
	public String       ColumnName = ""; 
	public String       Header = ""; 
	public int          displayType = 0; 
	public int          AD_Column_ID = 0; 
	public int          DisplayLength = 0; 
	public boolean      IsSameLine = false; 
	public boolean      IsDisplayed = false; 
	public String       DisplayLogic = ""; 
	public String       DefaultValue = ""; 
	public boolean      IsMandatory = false; 
	public boolean      IsReadOnly = false; 
	public boolean      IsUpdateable = false; 
	public boolean      IsHeading = false; 
	public boolean      IsFieldOnly = false; 
	public boolean      IsEncryptedField = false; 
	public boolean		IsSelectionColumn = false; 
	public int          SortNo = 0; 
	public int          FieldLength = 0; 
	public String       VFormat = ""; 
	public String       ValueMin = ""; 
	public String       ValueMax = ""; 
	public String       FieldGroup = ""; 
	public boolean      IsKey = false; 
	public boolean      IsParent = false; 
	public String       Callout = ""; 
	public int          AD_Process_ID = 0; 
	public String       Description = ""; 
	public String       Help = ""; 
	public String       ReadOnlyLogic = ""; 
 
	//  Process Parameter 
	public boolean      isRange = false; 
	public String       DefaultValue2 = ""; 
 
	/** Lookup Value Object     */ 
	public MLookupInfo  lookupInfo = null; 
 
	/** 
	 *  Set Context including contained elements 
	 *  @param newCtx new context 
	 */ 
	public void setCtx (Properties newCtx) 
	{ 
		ctx = newCtx; 
		if (lookupInfo != null) 
			lookupInfo.ctx = newCtx; 
	}   //  setCtx 
 
	/** 
	 *  Set Field as RowID 
	 */ 
	public void initRowID() 
	{ 
		displayType = DisplayType.RowID; 
		ColumnName = "ROWID"; 
		IsDisplayed = false; 
		IsMandatory = false; 
		IsReadOnly = true; 
		IsUpdateable = false; 
	}   //  initRowID 
 
	/** 
	 *  Validate Fields and create LookupInfo if required 
	 */ 
	protected void initFinish() 
	{ 
		//  Not null fields 
		if (DisplayLogic == null) 
			DisplayLogic = ""; 
		if (DefaultValue == null) 
			DefaultValue = ""; 
		if (FieldGroup == null) 
			FieldGroup = ""; 
		if (Description == null) 
			Description = ""; 
		if (Help == null) 
			Help = ""; 
		if (Callout == null) 
			Callout = ""; 
		if (ReadOnlyLogic == null) 
			ReadOnlyLogic = ""; 
 
	//	if (IsParent) 
	//		displayType = DisplayType.ID; 
 
		//  Create Lookup, if not ID 
		if (DisplayType.isLookup(displayType)) 
		{ 
			try 
			{ 
				lookupInfo = MLookupFactory.createVO (ctx, AD_Column_ID, WindowNo, displayType, isProcess); 
			} 
			catch (Exception e)     //  Cannot create Lookup 
			{ 
				Log.error("MFieldVO.initFinish - No LookupInfo for " + ColumnName); 
				displayType = DisplayType.ID; 
			} 
		} 
	}   //  initFinish 
 
	/*************************************************************************/ 
 
	/** 
	 *  Return the SQL statement used for the MFieldVO.create 
	 *  @param mTabVO tab value object 
	 *  @return SQL with or w/o translation 
	 */ 
	protected static String getSQL (MTabVO mTabVO) 
	{ 
		//	IsActive is part of View 
		String sql = "SELECT * FROM AD_Field_v WHERE AD_Tab_ID=?" 
			+ " ORDER BY SeqNo"; 
		if (!Env.isBaseLanguage(mTabVO.ctx, "AD_Tab")) 
			sql = "SELECT * FROM AD_Field_vt WHERE AD_Tab_ID=?" 
				+ " AND AD_Language='" + Env.getAD_Language(mTabVO.ctx) + "'" 
				+ " ORDER BY SeqNo"; 
		return sql; 
	}   //  getSQL 
 
	/** 
	 *  Create Field Value Object 
	 *  @param ctx context 
	 *  @param WindowNo window 
	 *  @param TabNo tab 
	 *  @param AD_Window_ID window 
	 *  @param readOnly r/o 
	 *  @param rs resultset 
	 *  @return MFieldVO 
	 */ 
	public static MFieldVO create (Properties ctx, int WindowNo, int TabNo, int AD_Window_ID, boolean readOnly, ResultSet rs) 
	{ 
		MFieldVO vo = new MFieldVO (ctx, WindowNo, TabNo, AD_Window_ID, readOnly); 
		try 
		{ 
			vo.ColumnName = rs.getString("ColumnName"); 
			if (vo.ColumnName == null) 
				return null; 
 
			Log.trace(Log.l5_DData, "MFieldVO.create", vo.ColumnName); 
 
			ResultSetMetaData rsmd = rs.getMetaData(); 
			for (int i = 1; i <= rsmd.getColumnCount(); i++) 
			{ 
				String columnName = rsmd.getColumnName (i); 
				if (columnName.equalsIgnoreCase("Name")) 
					vo.Header = rs.getString (i); 
				else if (columnName.equalsIgnoreCase("AD_Reference_ID")) 
					vo.displayType = rs.getInt (i); 
				else if (columnName.equalsIgnoreCase("AD_Column_ID")) 
					vo.AD_Column_ID = rs.getInt (i); 
				else if (columnName.equalsIgnoreCase("DisplayLength")) 
					vo.DisplayLength = rs.getInt (i); 
				else if (columnName.equalsIgnoreCase("IsSameLine")) 
					vo.IsSameLine = "Y".equals(rs.getString (i)); 
				else if (columnName.equalsIgnoreCase("IsDisplayed")) 
					vo.IsDisplayed = "Y".equals(rs.getString (i)); 
				else if (columnName.equalsIgnoreCase("DisplayLogic")) 
					vo.DisplayLogic = rs.getString (i); 
				else if (columnName.equalsIgnoreCase("DefaultValue")) 
					vo.DefaultValue = rs.getString (i); 
				else if (columnName.equalsIgnoreCase("IsMandatory")) 
					vo.IsMandatory = "Y".equals(rs.getString (i)); 
				else if (columnName.equalsIgnoreCase("IsReadOnly")) 
					vo.IsReadOnly = "Y".equals(rs.getString (i)); 
				else if (columnName.equalsIgnoreCase("IsUpdateable")) 
					vo.IsUpdateable = "Y".equals(rs.getString (i)); 
				else if (columnName.equalsIgnoreCase("IsHeading")) 
					vo.IsHeading = "Y".equals(rs.getString (i)); 
				else if (columnName.equalsIgnoreCase("IsFieldOnly")) 
					vo.IsFieldOnly = "Y".equals(rs.getString (i)); 
				else if (columnName.equalsIgnoreCase("IsEncryptedField")) 
					vo.IsEncryptedField = "Y".equals(rs.getString (i)); 
				else if (columnName.equalsIgnoreCase("IsSelectionColumn")) 
					vo.IsSelectionColumn = "Y".equals(rs.getString (i)); 
				else if (columnName.equalsIgnoreCase("SortNo")) 
					vo.SortNo = rs.getInt (i); 
				else if (columnName.equalsIgnoreCase("FieldLength")) 
					vo.FieldLength = rs.getInt (i); 
				else if (columnName.equalsIgnoreCase("VFormat")) 
					vo.VFormat = rs.getString (i); 
				else if (columnName.equalsIgnoreCase("ValueMin")) 
					vo.ValueMin = rs.getString (i); 
				else if (columnName.equalsIgnoreCase("ValueMax")) 
					vo.ValueMax = rs.getString (i); 
				else if (columnName.equalsIgnoreCase("FieldGroup")) 
					vo.FieldGroup = rs.getString (i); 
				else if (columnName.equalsIgnoreCase("IsKey")) 
					vo.IsKey = "Y".equals(rs.getString (i)); 
				else if (columnName.equalsIgnoreCase("IsParent")) 
					vo.IsParent = "Y".equals(rs.getString (i)); 
				else if (columnName.equalsIgnoreCase("Description")) 
					vo.Description = rs.getString (i); 
				else if (columnName.equalsIgnoreCase("Help")) 
					vo.Help = rs.getString (i); 
				else if (columnName.equalsIgnoreCase("Callout")) 
					vo.Callout = rs.getString (i); 
				else if (columnName.equalsIgnoreCase("AD_Process_ID")) 
					vo.AD_Process_ID = rs.getInt (i); 
				else if (columnName.equalsIgnoreCase("ReadOnlyLogic")) 
					vo.ReadOnlyLogic = rs.getString (i); 
			} 
			if (vo.Header == null) 
				vo.Header = vo.ColumnName; 
		} 
		catch (SQLException e) 
		{ 
			Log.error("MFieldVO.create", e); 
			return null; 
		} 
		vo.initFinish(); 
		return vo; 
	}   //  create 
 
	/** 
	 *  Init Field for Process Parameter 
	 *  @param ctx context 
	 *  @param WindowNo window 
	 *  @param rs result set 
	 *  @return MFieldVO 
	 */ 
	public static MFieldVO createParameter (Properties ctx, int WindowNo, ResultSet rs) 
	{ 
		MFieldVO vo = new MFieldVO (ctx, WindowNo, 0, 0, false); 
		vo.isProcess = true; 
		vo.IsDisplayed = true; 
		vo.IsReadOnly = false; 
		vo.IsUpdateable = true; 
 
		try 
		{ 
			vo.AD_Column_ID = rs.getInt("AD_Process_Para_ID"); 
			vo.ColumnName = rs.getString("ColumnName"); 
			vo.Header = rs.getString("Name"); 
			vo.Description = rs.getString("Description"); 
			vo.Help = rs.getString("Help"); 
			vo.displayType = rs.getInt("AD_Reference_ID"); 
			vo.IsMandatory = rs.getString("IsMandatory").equals("Y"); 
			vo.FieldLength = rs.getInt("FieldLength"); 
			vo.DisplayLength = vo.FieldLength; 
			vo.DefaultValue = rs.getString("DefaultValue"); 
			vo.DefaultValue2 = rs.getString("DefaultValue2"); 
			vo.VFormat = rs.getString("VFormat"); 
			vo.ValueMin = rs.getString("ValueMin"); 
			vo.ValueMax = rs.getString("ValueMax"); 
			vo.isRange = rs.getString("IsRange").equals("Y"); 
		} 
		catch (SQLException e) 
		{ 
			Log.error("MFieldVO.createParameter", e); 
		} 
		// 
		vo.initFinish(); 
		if (vo.DefaultValue2 == null) 
			vo.DefaultValue2 = ""; 
		return vo; 
	}   //  createParameter 
 
	/** 
	 *  Create range "to" Parameter Field from "from" Parameter Field 
	 *  @param voF field value object 
	 *  @return to MFieldVO 
	 */ 
	public static MFieldVO createParameter (MFieldVO voF) 
	{ 
		MFieldVO voT = new MFieldVO (voF.ctx, voF.WindowNo, voF.TabNo, voF.AD_Window_ID, voF.tabReadOnly); 
		voT.isProcess = true; 
		voT.IsDisplayed = true; 
		voT.IsReadOnly = false; 
		voT.IsUpdateable = true; 
		// 
		voT.AD_Column_ID = voF.AD_Column_ID;    //  AD_Process_Para_ID 
		voT.ColumnName = voF.ColumnName; 
		voT.Header = voF.Header; 
		voT.Description = voF.Description; 
		voT.Help = voF.Help; 
		voT.displayType = voF.displayType; 
		voT.IsMandatory = voF.IsMandatory; 
		voT.FieldLength = voF.FieldLength; 
		voT.DisplayLength = voF.FieldLength; 
		voT.DefaultValue = voF.DefaultValue2; 
		voT.VFormat = voF.VFormat; 
		voT.ValueMin = voF.ValueMin; 
		voT.ValueMax = voF.ValueMax; 
		voT.isRange = voF.isRange; 
		// 
		return voT; 
	}   //  createParameter 
 
 
	/** 
	 *  Make it a Row ID 
	 *  @param ctx context 
	 *  @param WindowNo window 
	 *  @param TabNo tab 
	 *  @param AD_Window_ID window 
	 *  @return MFieldVO 
	 */ 
	public static MFieldVO createRowID (Properties ctx, int WindowNo, int TabNo, int AD_Window_ID) 
	{ 
		MFieldVO vo = new MFieldVO (ctx, WindowNo, TabNo, AD_Window_ID, true); 
		vo.initRowID(); 
		vo.initFinish(); 
		return vo; 
	}   //  initRowID 
 
	/** 
	 *  Make a standard field (Created/Updated/By) 
	 *  @param ctx context 
	 *  @param WindowNo window 
	 *  @param TabNo tab 
	 *  @param AD_Window_ID window 
	 *  @param tabReadOnly rab is r/o 
	 *  @param isCreated is Created field 
	 *  @param isTimestamp is the timestamp (not by) 
	 *  @return MFieldVO 
	 */ 
	public static MFieldVO createStdField (Properties ctx, int WindowNo, int TabNo, int AD_Window_ID, boolean tabReadOnly, 
		boolean isCreated, boolean isTimestamp) 
	{ 
		MFieldVO vo = new MFieldVO (ctx, WindowNo, TabNo, AD_Window_ID, tabReadOnly); 
		vo.ColumnName = isCreated ? "Created" : "Updated"; 
		if (!isTimestamp) 
			vo.ColumnName += "By"; 
		vo.displayType = isTimestamp ? DisplayType.DateTime : DisplayType.Integer; 
		vo.IsDisplayed = false; 
		vo.IsMandatory = false; 
		vo.IsReadOnly = false; 
		vo.IsUpdateable = true; 
		vo.initFinish(); 
		return vo; 
	}   //  initStdField 
 
}   //  MFieldVO