Implemented field editor factory extension for swing client.
This commit is contained in:
parent
6003245f32
commit
993c687788
|
@ -4,6 +4,7 @@
|
||||||
<extension-point id="org.adempiere.osgi.IMenuAction" name="MenuAction" schema="schema/org.adempiere.osgi.IMenuAction.exsd"/>
|
<extension-point id="org.adempiere.osgi.IMenuAction" name="MenuAction" schema="schema/org.adempiere.osgi.IMenuAction.exsd"/>
|
||||||
<extension-point id="org.adempiere.apps.Form" name="Form" schema="schema/org.adempiere.apps.Form.exsd"/>
|
<extension-point id="org.adempiere.apps.Form" name="Form" schema="schema/org.adempiere.apps.Form.exsd"/>
|
||||||
<extension-point id="org.adempiere.osgi.IInfoFactory" name="Info Factory extension" schema="schema/org.adempiere.osgi.IInfoFactory.exsd"/>
|
<extension-point id="org.adempiere.osgi.IInfoFactory" name="Info Factory extension" schema="schema/org.adempiere.osgi.IInfoFactory.exsd"/>
|
||||||
|
<extension-point id="org.adempiere.osgi.IEditorFactory" name="Field editor factory" schema="schema/org.adempiere.osgi.IEditorFactory.exsd"/>
|
||||||
<extension
|
<extension
|
||||||
id="RF"
|
id="RF"
|
||||||
name="RF"
|
name="RF"
|
||||||
|
@ -59,5 +60,14 @@
|
||||||
priority="0">
|
priority="0">
|
||||||
</factory>
|
</factory>
|
||||||
</extension>
|
</extension>
|
||||||
|
<extension
|
||||||
|
id="org.adempiere.osgi.DefaultEditorFactory"
|
||||||
|
name="Default field editor factory"
|
||||||
|
point="org.adempiere.osgi.IEditorFactory">
|
||||||
|
<factory
|
||||||
|
class="org.adempiere.osgi.DefaultEditorFactory"
|
||||||
|
priority="0">
|
||||||
|
</factory>
|
||||||
|
</extension>
|
||||||
|
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
|
@ -0,0 +1,109 @@
|
||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<!-- Schema file written by PDE -->
|
||||||
|
<schema targetNamespace="org.adempiere.ui.swing" xmlns="http://www.w3.org/2001/XMLSchema">
|
||||||
|
<annotation>
|
||||||
|
<appinfo>
|
||||||
|
<meta.schema plugin="org.adempiere.ui.swing" id="org.adempiere.osgi.IEditorFactory" name="Field editor factory"/>
|
||||||
|
</appinfo>
|
||||||
|
<documentation>
|
||||||
|
[Enter description of this extension point.]
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
<element name="extension">
|
||||||
|
<annotation>
|
||||||
|
<appinfo>
|
||||||
|
<meta.element />
|
||||||
|
</appinfo>
|
||||||
|
</annotation>
|
||||||
|
<complexType>
|
||||||
|
<choice>
|
||||||
|
<element ref="factory"/>
|
||||||
|
</choice>
|
||||||
|
<attribute name="point" type="string" use="required">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="id" type="string">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="name" type="string">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
|
||||||
|
</documentation>
|
||||||
|
<appinfo>
|
||||||
|
<meta.attribute translatable="true"/>
|
||||||
|
</appinfo>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
</complexType>
|
||||||
|
</element>
|
||||||
|
|
||||||
|
<element name="factory">
|
||||||
|
<complexType>
|
||||||
|
<attribute name="priority" type="string" use="required">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
numeric priority value, higher value is of higher priority.
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="class" type="string" use="required">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
|
||||||
|
</documentation>
|
||||||
|
<appinfo>
|
||||||
|
<meta.attribute kind="java" basedOn=":org.adempiere.osgi.IEditorFactory"/>
|
||||||
|
</appinfo>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
</complexType>
|
||||||
|
</element>
|
||||||
|
|
||||||
|
<annotation>
|
||||||
|
<appinfo>
|
||||||
|
<meta.section type="since"/>
|
||||||
|
</appinfo>
|
||||||
|
<documentation>
|
||||||
|
[Enter the first release in which this extension point appears.]
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
<annotation>
|
||||||
|
<appinfo>
|
||||||
|
<meta.section type="examples"/>
|
||||||
|
</appinfo>
|
||||||
|
<documentation>
|
||||||
|
[Enter extension point usage example here.]
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
<annotation>
|
||||||
|
<appinfo>
|
||||||
|
<meta.section type="apiinfo"/>
|
||||||
|
</appinfo>
|
||||||
|
<documentation>
|
||||||
|
[Enter API information here.]
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
<annotation>
|
||||||
|
<appinfo>
|
||||||
|
<meta.section type="implementation"/>
|
||||||
|
</appinfo>
|
||||||
|
<documentation>
|
||||||
|
[Enter information about supplied implementation of this extension point.]
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
|
||||||
|
</schema>
|
|
@ -0,0 +1,292 @@
|
||||||
|
/******************************************************************************
|
||||||
|
* Product: Adempiere ERP & CRM Smart Business Solution *
|
||||||
|
* Copyright (C) 2010 Heng Sin Low *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms version 2 of the GNU General Public License as published *
|
||||||
|
* by the Free Software Foundation. This program is distributed in the hope *
|
||||||
|
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
||||||
|
* See the GNU General Public License for more details. *
|
||||||
|
* You should have received a copy of the GNU General Public License along *
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
|
||||||
|
*****************************************************************************/
|
||||||
|
package org.adempiere.osgi;
|
||||||
|
|
||||||
|
import org.compiere.grid.ed.ADempiereAutoCompleteDecorator;
|
||||||
|
import org.compiere.grid.ed.VAccount;
|
||||||
|
import org.compiere.grid.ed.VAssignment;
|
||||||
|
import org.compiere.grid.ed.VBinary;
|
||||||
|
import org.compiere.grid.ed.VButton;
|
||||||
|
import org.compiere.grid.ed.VCheckBox;
|
||||||
|
import org.compiere.grid.ed.VColor;
|
||||||
|
import org.compiere.grid.ed.VDate;
|
||||||
|
import org.compiere.grid.ed.VEditor;
|
||||||
|
import org.compiere.grid.ed.VFile;
|
||||||
|
import org.compiere.grid.ed.VImage;
|
||||||
|
import org.compiere.grid.ed.VLocation;
|
||||||
|
import org.compiere.grid.ed.VLocator;
|
||||||
|
import org.compiere.grid.ed.VLookup;
|
||||||
|
import org.compiere.grid.ed.VMemo;
|
||||||
|
import org.compiere.grid.ed.VNumber;
|
||||||
|
import org.compiere.grid.ed.VPAttribute;
|
||||||
|
import org.compiere.grid.ed.VPassword;
|
||||||
|
import org.compiere.grid.ed.VString;
|
||||||
|
import org.compiere.grid.ed.VText;
|
||||||
|
import org.compiere.grid.ed.VTextLong;
|
||||||
|
import org.compiere.grid.ed.VURL;
|
||||||
|
import org.compiere.model.GridField;
|
||||||
|
import org.compiere.model.GridTab;
|
||||||
|
import org.compiere.model.MAccountLookup;
|
||||||
|
import org.compiere.model.MLocationLookup;
|
||||||
|
import org.compiere.model.MLocatorLookup;
|
||||||
|
import org.compiere.model.MPAttributeLookup;
|
||||||
|
import org.compiere.util.DisplayType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author hengsin
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class DefaultEditorFactory implements IEditorFactory {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VEditor getEditor(GridTab mTab, GridField mField, boolean tableEditor) {
|
||||||
|
if (mField == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
VEditor editor = null;
|
||||||
|
int displayType = mField.getDisplayType();
|
||||||
|
String columnName = mField.getColumnName();
|
||||||
|
boolean mandatory = mField.isMandatory(false); // no context check
|
||||||
|
boolean readOnly = mField.isReadOnly();
|
||||||
|
boolean updateable = mField.isUpdateable();
|
||||||
|
int WindowNo = mField.getWindowNo();
|
||||||
|
|
||||||
|
// Not a Field
|
||||||
|
if (mField.isHeading())
|
||||||
|
return null;
|
||||||
|
|
||||||
|
// String (clear/password)
|
||||||
|
if (displayType == DisplayType.String
|
||||||
|
|| displayType == DisplayType.PrinterName
|
||||||
|
|| (tableEditor && (displayType == DisplayType.Text || displayType == DisplayType.TextLong)) )
|
||||||
|
{
|
||||||
|
if (mField.isEncryptedField())
|
||||||
|
{
|
||||||
|
VPassword vs = new VPassword (columnName, mandatory, readOnly, updateable,
|
||||||
|
mField.getDisplayLength(), mField.getFieldLength(), mField.getVFormat());
|
||||||
|
vs.setName (columnName);
|
||||||
|
vs.setField (mField);
|
||||||
|
editor = vs;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
VString vs = new VString (columnName, mandatory, readOnly, updateable,
|
||||||
|
mField.getDisplayLength(), mField.getFieldLength(),
|
||||||
|
mField.getVFormat(), mField.getObscureType());
|
||||||
|
vs.setName (columnName);
|
||||||
|
vs.setField (mField);
|
||||||
|
if (mField.isAutocomplete()) {
|
||||||
|
ADempiereAutoCompleteDecorator.decorate(vs, mField.getEntries(), false);
|
||||||
|
}
|
||||||
|
editor = vs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// URL
|
||||||
|
else if (displayType == DisplayType.URL)
|
||||||
|
{
|
||||||
|
VURL vs = new VURL (columnName, mandatory, readOnly, updateable,
|
||||||
|
mField.getDisplayLength(), mField.getFieldLength());
|
||||||
|
vs.setName (columnName);
|
||||||
|
vs.setField (mField);
|
||||||
|
editor = vs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Printer Name
|
||||||
|
else if (displayType == DisplayType.PrinterName)
|
||||||
|
{
|
||||||
|
VPrinterName vs = new VPrinterName (columnName, mandatory, readOnly, updateable,
|
||||||
|
mField.getDisplayLength(), mField.getFieldLength(), mField.getVFormat());
|
||||||
|
vs.setName (columnName);
|
||||||
|
vs.setField (mField);
|
||||||
|
editor = vs;
|
||||||
|
} **/
|
||||||
|
|
||||||
|
// File Path / Name
|
||||||
|
else if (displayType == DisplayType.FilePath || displayType == DisplayType.FileName)
|
||||||
|
{
|
||||||
|
VFile file = new VFile (columnName, mandatory, readOnly, updateable,
|
||||||
|
mField.getFieldLength(), displayType == DisplayType.FileName);
|
||||||
|
file.setName(columnName);
|
||||||
|
file.setField(mField);
|
||||||
|
editor = file;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Lookup
|
||||||
|
else if (DisplayType.isLookup(displayType) || displayType == DisplayType.ID)
|
||||||
|
{
|
||||||
|
VLookup vl = new VLookup(columnName, mandatory, readOnly, updateable,
|
||||||
|
mField.getLookup());
|
||||||
|
vl.setName(columnName);
|
||||||
|
vl.setField (mField);
|
||||||
|
editor = vl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Number
|
||||||
|
else if (DisplayType.isNumeric(displayType))
|
||||||
|
{
|
||||||
|
VNumber vn = new VNumber(columnName, mandatory, readOnly, updateable,
|
||||||
|
displayType, mField.getHeader());
|
||||||
|
vn.setRange(mField.getValueMin(), mField.getValueMax());
|
||||||
|
vn.setName(columnName);
|
||||||
|
vn.setField (mField);
|
||||||
|
editor = vn;
|
||||||
|
}
|
||||||
|
|
||||||
|
// YesNo
|
||||||
|
else if (displayType == DisplayType.YesNo)
|
||||||
|
{
|
||||||
|
VCheckBox vc = new VCheckBox(columnName, mandatory, readOnly, updateable,
|
||||||
|
mField.getHeader(), mField.getDescription(), tableEditor);
|
||||||
|
vc.setName(columnName);
|
||||||
|
vc.setField (mField);
|
||||||
|
editor = vc;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Text (single row)
|
||||||
|
else if (displayType == DisplayType.Text)
|
||||||
|
{
|
||||||
|
VText vt = new VText(columnName, mandatory, readOnly, updateable,
|
||||||
|
mField.getDisplayLength(), mField.getFieldLength());
|
||||||
|
vt.setName(columnName);
|
||||||
|
vt.setField (mField);
|
||||||
|
editor = vt;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Memo (single row)
|
||||||
|
else if (displayType == DisplayType.Memo)
|
||||||
|
{
|
||||||
|
VMemo vt = new VMemo(columnName, mandatory, readOnly, updateable,
|
||||||
|
mField.getDisplayLength(), mField.getFieldLength());
|
||||||
|
vt.setName(columnName);
|
||||||
|
vt.setField (mField);
|
||||||
|
editor = vt;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Date
|
||||||
|
else if (DisplayType.isDate(displayType))
|
||||||
|
{
|
||||||
|
if (displayType == DisplayType.DateTime)
|
||||||
|
readOnly = true;
|
||||||
|
VDate vd = new VDate(columnName, mandatory, readOnly, updateable,
|
||||||
|
displayType, mField.getHeader());
|
||||||
|
vd.setName(columnName);
|
||||||
|
vd.setField (mField);
|
||||||
|
editor = vd;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Location
|
||||||
|
else if (displayType == DisplayType.Location)
|
||||||
|
{
|
||||||
|
VLocation loc = new VLocation (mTab, columnName, mandatory, readOnly, updateable,
|
||||||
|
(MLocationLookup)mField.getLookup());
|
||||||
|
loc.setName(columnName);
|
||||||
|
loc.setField (mField);
|
||||||
|
editor = loc;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Locator
|
||||||
|
else if (displayType == DisplayType.Locator)
|
||||||
|
{
|
||||||
|
VLocator loc = new VLocator (columnName, mandatory, readOnly, updateable,
|
||||||
|
(MLocatorLookup)mField.getLookup(), WindowNo);
|
||||||
|
loc.setName(columnName);
|
||||||
|
loc.setField (mField);
|
||||||
|
editor = loc;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Account
|
||||||
|
else if (displayType == DisplayType.Account)
|
||||||
|
{
|
||||||
|
//hengsin: bug [ 1711795 ] Combination copied itself in Grid mode
|
||||||
|
/*
|
||||||
|
VAccount acct = new VAccount (columnName, mandatory, readOnly, updateable,
|
||||||
|
(MAccountLookup)mField.getLookup(), mField.getHeader());*/
|
||||||
|
VAccount acct = new VAccount (columnName, mandatory, readOnly, updateable,
|
||||||
|
new MAccountLookup (mField.getVO().ctx, mField.getWindowNo()), mField.getHeader());
|
||||||
|
acct.setName(columnName);
|
||||||
|
acct.setField (mField);
|
||||||
|
editor = acct;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Button
|
||||||
|
else if (displayType == DisplayType.Button)
|
||||||
|
{
|
||||||
|
VButton button = new VButton(columnName, mandatory, readOnly, updateable,
|
||||||
|
mField.getHeader(), mField.getDescription(), mField.getHelp(), mField.getAD_Process_ID());
|
||||||
|
button.setName(columnName);
|
||||||
|
button.setField (mField);
|
||||||
|
editor = button;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assignment
|
||||||
|
else if (displayType == DisplayType.Assignment)
|
||||||
|
{
|
||||||
|
VAssignment assign = new VAssignment (mandatory, readOnly, updateable);
|
||||||
|
assign.setName(columnName);
|
||||||
|
assign.setField (mField);
|
||||||
|
editor = assign;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Color
|
||||||
|
else if (displayType == DisplayType.Color)
|
||||||
|
{
|
||||||
|
VColor color = new VColor (mTab, mandatory, readOnly);
|
||||||
|
color.setName(columnName);
|
||||||
|
color.setField (mField);
|
||||||
|
editor = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Image
|
||||||
|
else if (displayType == DisplayType.Image)
|
||||||
|
{
|
||||||
|
VImage image = new VImage (columnName, WindowNo);
|
||||||
|
image.setName(columnName);
|
||||||
|
image.setField (mField);
|
||||||
|
editor = image;
|
||||||
|
}
|
||||||
|
|
||||||
|
// PAttribute
|
||||||
|
else if (displayType == DisplayType.PAttribute)
|
||||||
|
{
|
||||||
|
VPAttribute attrib = new VPAttribute (mTab, mandatory, readOnly, updateable, WindowNo,
|
||||||
|
(MPAttributeLookup)mField.getLookup());
|
||||||
|
attrib.setName(columnName);
|
||||||
|
attrib.setField (mField);
|
||||||
|
editor = attrib;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Long Text (CLob)
|
||||||
|
else if (displayType == DisplayType.TextLong)
|
||||||
|
{
|
||||||
|
VTextLong vt = new VTextLong (columnName, mandatory, readOnly, updateable,
|
||||||
|
mField.getDisplayLength(), mField.getFieldLength());
|
||||||
|
vt.setName(columnName);
|
||||||
|
vt.setField (mField);
|
||||||
|
editor = vt;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Binary (BLob)
|
||||||
|
else if (displayType == DisplayType.Binary)
|
||||||
|
{
|
||||||
|
VBinary bin = new VBinary (columnName, WindowNo);
|
||||||
|
bin.setName(columnName);
|
||||||
|
bin.setField (mField);
|
||||||
|
editor = bin;
|
||||||
|
}
|
||||||
|
|
||||||
|
return editor;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,36 @@
|
||||||
|
/******************************************************************************
|
||||||
|
* Product: Adempiere ERP & CRM Smart Business Solution *
|
||||||
|
* Copyright (C) 2010 Heng Sin Low *
|
||||||
|
* This program is free software; you can redistribute it and/or modify it *
|
||||||
|
* under the terms version 2 of the GNU General Public License as published *
|
||||||
|
* by the Free Software Foundation. This program is distributed in the hope *
|
||||||
|
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
|
||||||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
|
||||||
|
* See the GNU General Public License for more details. *
|
||||||
|
* You should have received a copy of the GNU General Public License along *
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc., *
|
||||||
|
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
|
||||||
|
*****************************************************************************/
|
||||||
|
package org.adempiere.osgi;
|
||||||
|
|
||||||
|
import org.compiere.grid.ed.VEditor;
|
||||||
|
import org.compiere.model.GridField;
|
||||||
|
import org.compiere.model.GridTab;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author hengsin
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public interface IEditorFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create Editor for MField.
|
||||||
|
* The Name is set to the column name for dynamic display management
|
||||||
|
* @param mTab MTab
|
||||||
|
* @param mField MField
|
||||||
|
* @param tableEditor true if table editor
|
||||||
|
* @return grid editor
|
||||||
|
*/
|
||||||
|
public VEditor getEditor (GridTab mTab, GridField mField, boolean tableEditor);
|
||||||
|
}
|
|
@ -16,14 +16,12 @@
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
package org.compiere.grid.ed;
|
package org.compiere.grid.ed;
|
||||||
|
|
||||||
import java.util.logging.Level;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.adempiere.base.Service;
|
||||||
|
import org.adempiere.osgi.IEditorFactory;
|
||||||
import org.compiere.model.GridField;
|
import org.compiere.model.GridField;
|
||||||
import org.compiere.model.GridTab;
|
import org.compiere.model.GridTab;
|
||||||
import org.compiere.model.MAccountLookup;
|
|
||||||
import org.compiere.model.MLocationLookup;
|
|
||||||
import org.compiere.model.MLocatorLookup;
|
|
||||||
import org.compiere.model.MPAttributeLookup;
|
|
||||||
import org.compiere.swing.CLabel;
|
import org.compiere.swing.CLabel;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
import org.compiere.util.DisplayType;
|
import org.compiere.util.DisplayType;
|
||||||
|
@ -59,243 +57,14 @@ public class VEditorFactory
|
||||||
*/
|
*/
|
||||||
public static VEditor getEditor (GridTab mTab, GridField mField, boolean tableEditor)
|
public static VEditor getEditor (GridTab mTab, GridField mField, boolean tableEditor)
|
||||||
{
|
{
|
||||||
if (mField == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
VEditor editor = null;
|
VEditor editor = null;
|
||||||
int displayType = mField.getDisplayType();
|
List<IEditorFactory> factoryList = Service.list(IEditorFactory.class);
|
||||||
String columnName = mField.getColumnName();
|
for(IEditorFactory factory : factoryList)
|
||||||
boolean mandatory = mField.isMandatory(false); // no context check
|
|
||||||
boolean readOnly = mField.isReadOnly();
|
|
||||||
boolean updateable = mField.isUpdateable();
|
|
||||||
int WindowNo = mField.getWindowNo();
|
|
||||||
|
|
||||||
// Not a Field
|
|
||||||
if (mField.isHeading())
|
|
||||||
return null;
|
|
||||||
|
|
||||||
// String (clear/password)
|
|
||||||
if (displayType == DisplayType.String
|
|
||||||
|| displayType == DisplayType.PrinterName
|
|
||||||
|| (tableEditor && (displayType == DisplayType.Text || displayType == DisplayType.TextLong)) )
|
|
||||||
{
|
{
|
||||||
if (mField.isEncryptedField())
|
editor = factory.getEditor(mTab, mField, tableEditor);
|
||||||
{
|
if (editor != null)
|
||||||
VPassword vs = new VPassword (columnName, mandatory, readOnly, updateable,
|
break;
|
||||||
mField.getDisplayLength(), mField.getFieldLength(), mField.getVFormat());
|
|
||||||
vs.setName (columnName);
|
|
||||||
vs.setField (mField);
|
|
||||||
editor = vs;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
VString vs = new VString (columnName, mandatory, readOnly, updateable,
|
|
||||||
mField.getDisplayLength(), mField.getFieldLength(),
|
|
||||||
mField.getVFormat(), mField.getObscureType());
|
|
||||||
vs.setName (columnName);
|
|
||||||
vs.setField (mField);
|
|
||||||
if (mField.isAutocomplete()) {
|
|
||||||
ADempiereAutoCompleteDecorator.decorate(vs, mField.getEntries(), false);
|
|
||||||
}
|
|
||||||
editor = vs;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// URL
|
|
||||||
else if (displayType == DisplayType.URL)
|
|
||||||
{
|
|
||||||
VURL vs = new VURL (columnName, mandatory, readOnly, updateable,
|
|
||||||
mField.getDisplayLength(), mField.getFieldLength());
|
|
||||||
vs.setName (columnName);
|
|
||||||
vs.setField (mField);
|
|
||||||
editor = vs;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Printer Name
|
|
||||||
else if (displayType == DisplayType.PrinterName)
|
|
||||||
{
|
|
||||||
VPrinterName vs = new VPrinterName (columnName, mandatory, readOnly, updateable,
|
|
||||||
mField.getDisplayLength(), mField.getFieldLength(), mField.getVFormat());
|
|
||||||
vs.setName (columnName);
|
|
||||||
vs.setField (mField);
|
|
||||||
editor = vs;
|
|
||||||
} **/
|
|
||||||
|
|
||||||
// File Path / Name
|
|
||||||
else if (displayType == DisplayType.FilePath || displayType == DisplayType.FileName)
|
|
||||||
{
|
|
||||||
VFile file = new VFile (columnName, mandatory, readOnly, updateable,
|
|
||||||
mField.getFieldLength(), displayType == DisplayType.FileName);
|
|
||||||
file.setName(columnName);
|
|
||||||
file.setField(mField);
|
|
||||||
editor = file;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lookup
|
|
||||||
else if (DisplayType.isLookup(displayType) || displayType == DisplayType.ID)
|
|
||||||
{
|
|
||||||
VLookup vl = new VLookup(columnName, mandatory, readOnly, updateable,
|
|
||||||
mField.getLookup());
|
|
||||||
vl.setName(columnName);
|
|
||||||
vl.setField (mField);
|
|
||||||
editor = vl;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Number
|
|
||||||
else if (DisplayType.isNumeric(displayType))
|
|
||||||
{
|
|
||||||
VNumber vn = new VNumber(columnName, mandatory, readOnly, updateable,
|
|
||||||
displayType, mField.getHeader());
|
|
||||||
vn.setRange(mField.getValueMin(), mField.getValueMax());
|
|
||||||
vn.setName(columnName);
|
|
||||||
vn.setField (mField);
|
|
||||||
editor = vn;
|
|
||||||
}
|
|
||||||
|
|
||||||
// YesNo
|
|
||||||
else if (displayType == DisplayType.YesNo)
|
|
||||||
{
|
|
||||||
VCheckBox vc = new VCheckBox(columnName, mandatory, readOnly, updateable,
|
|
||||||
mField.getHeader(), mField.getDescription(), tableEditor);
|
|
||||||
vc.setName(columnName);
|
|
||||||
vc.setField (mField);
|
|
||||||
editor = vc;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Text (single row)
|
|
||||||
else if (displayType == DisplayType.Text)
|
|
||||||
{
|
|
||||||
VText vt = new VText(columnName, mandatory, readOnly, updateable,
|
|
||||||
mField.getDisplayLength(), mField.getFieldLength());
|
|
||||||
vt.setName(columnName);
|
|
||||||
vt.setField (mField);
|
|
||||||
editor = vt;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Memo (single row)
|
|
||||||
else if (displayType == DisplayType.Memo)
|
|
||||||
{
|
|
||||||
VMemo vt = new VMemo(columnName, mandatory, readOnly, updateable,
|
|
||||||
mField.getDisplayLength(), mField.getFieldLength());
|
|
||||||
vt.setName(columnName);
|
|
||||||
vt.setField (mField);
|
|
||||||
editor = vt;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Date
|
|
||||||
else if (DisplayType.isDate(displayType))
|
|
||||||
{
|
|
||||||
if (displayType == DisplayType.DateTime)
|
|
||||||
readOnly = true;
|
|
||||||
VDate vd = new VDate(columnName, mandatory, readOnly, updateable,
|
|
||||||
displayType, mField.getHeader());
|
|
||||||
vd.setName(columnName);
|
|
||||||
vd.setField (mField);
|
|
||||||
editor = vd;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Location
|
|
||||||
else if (displayType == DisplayType.Location)
|
|
||||||
{
|
|
||||||
VLocation loc = new VLocation (mTab, columnName, mandatory, readOnly, updateable,
|
|
||||||
(MLocationLookup)mField.getLookup());
|
|
||||||
loc.setName(columnName);
|
|
||||||
loc.setField (mField);
|
|
||||||
editor = loc;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Locator
|
|
||||||
else if (displayType == DisplayType.Locator)
|
|
||||||
{
|
|
||||||
VLocator loc = new VLocator (columnName, mandatory, readOnly, updateable,
|
|
||||||
(MLocatorLookup)mField.getLookup(), WindowNo);
|
|
||||||
loc.setName(columnName);
|
|
||||||
loc.setField (mField);
|
|
||||||
editor = loc;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Account
|
|
||||||
else if (displayType == DisplayType.Account)
|
|
||||||
{
|
|
||||||
//hengsin: bug [ 1711795 ] Combination copied itself in Grid mode
|
|
||||||
/*
|
|
||||||
VAccount acct = new VAccount (columnName, mandatory, readOnly, updateable,
|
|
||||||
(MAccountLookup)mField.getLookup(), mField.getHeader());*/
|
|
||||||
VAccount acct = new VAccount (columnName, mandatory, readOnly, updateable,
|
|
||||||
new MAccountLookup (mField.getVO().ctx, mField.getWindowNo()), mField.getHeader());
|
|
||||||
acct.setName(columnName);
|
|
||||||
acct.setField (mField);
|
|
||||||
editor = acct;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Button
|
|
||||||
else if (displayType == DisplayType.Button)
|
|
||||||
{
|
|
||||||
VButton button = new VButton(columnName, mandatory, readOnly, updateable,
|
|
||||||
mField.getHeader(), mField.getDescription(), mField.getHelp(), mField.getAD_Process_ID());
|
|
||||||
button.setName(columnName);
|
|
||||||
button.setField (mField);
|
|
||||||
editor = button;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Assignment
|
|
||||||
else if (displayType == DisplayType.Assignment)
|
|
||||||
{
|
|
||||||
VAssignment assign = new VAssignment (mandatory, readOnly, updateable);
|
|
||||||
assign.setName(columnName);
|
|
||||||
assign.setField (mField);
|
|
||||||
editor = assign;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Color
|
|
||||||
else if (displayType == DisplayType.Color)
|
|
||||||
{
|
|
||||||
VColor color = new VColor (mTab, mandatory, readOnly);
|
|
||||||
color.setName(columnName);
|
|
||||||
color.setField (mField);
|
|
||||||
editor = color;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Image
|
|
||||||
else if (displayType == DisplayType.Image)
|
|
||||||
{
|
|
||||||
VImage image = new VImage (columnName, WindowNo);
|
|
||||||
image.setName(columnName);
|
|
||||||
image.setField (mField);
|
|
||||||
editor = image;
|
|
||||||
}
|
|
||||||
|
|
||||||
// PAttribute
|
|
||||||
else if (displayType == DisplayType.PAttribute)
|
|
||||||
{
|
|
||||||
VPAttribute attrib = new VPAttribute (mTab, mandatory, readOnly, updateable, WindowNo,
|
|
||||||
(MPAttributeLookup)mField.getLookup());
|
|
||||||
attrib.setName(columnName);
|
|
||||||
attrib.setField (mField);
|
|
||||||
editor = attrib;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Long Text (CLob)
|
|
||||||
else if (displayType == DisplayType.TextLong)
|
|
||||||
{
|
|
||||||
VTextLong vt = new VTextLong (columnName, mandatory, readOnly, updateable,
|
|
||||||
mField.getDisplayLength(), mField.getFieldLength());
|
|
||||||
vt.setName(columnName);
|
|
||||||
vt.setField (mField);
|
|
||||||
editor = vt;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Binary (BLob)
|
|
||||||
else if (displayType == DisplayType.Binary)
|
|
||||||
{
|
|
||||||
VBinary bin = new VBinary (columnName, WindowNo);
|
|
||||||
bin.setName(columnName);
|
|
||||||
bin.setField (mField);
|
|
||||||
editor = bin;
|
|
||||||
}
|
|
||||||
|
|
||||||
else
|
|
||||||
log.log(Level.WARNING, columnName + " - Unknown Type: " + displayType);
|
|
||||||
|
|
||||||
return editor;
|
return editor;
|
||||||
} // getEditor
|
} // getEditor
|
||||||
|
|
||||||
|
@ -327,6 +96,7 @@ public class VEditorFactory
|
||||||
} // getLabel
|
} // getLabel
|
||||||
|
|
||||||
/** Logger */
|
/** Logger */
|
||||||
|
@SuppressWarnings("unused")
|
||||||
private static CLogger log = CLogger.getCLogger(VEditorFactory.class);
|
private static CLogger log = CLogger.getCLogger(VEditorFactory.class);
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue