Backed out changeset 3e83b907df0f

This commit is contained in:
Carlos Ruiz 2015-01-14 10:08:01 -05:00
parent 8cac1b86f5
commit 24d17a44d7
12 changed files with 106 additions and 426 deletions

View File

@ -1,48 +0,0 @@
SET SQLBLANKLINES ON
SET DEFINE OFF
-- Sep 11, 2014 9:56:05 AM ICT
-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator
INSERT INTO AD_Element (ColumnName,AD_Element_ID,Help,Name,Description,PrintName,AD_Element_UU,AD_Org_ID,CreatedBy,UpdatedBy,IsActive,AD_Client_ID,EntityType,Created,Updated) VALUES ('ParentRelatedColumn_ID',202792,'default column RelatedColumn in Relate Info window will link with key column of main info window
column define in ParentRelatedColumn will replace key column','Parent Related Column','column in parent info window, link with column in this relate info','Parent Related Column','d35a2b4b-6022-4b52-bace-93f05958a77a',0,100,100,'Y',0,'D',TO_DATE('2014-09-11 09:55:54','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2014-09-11 09:55:54','YYYY-MM-DD HH24:MI:SS'))
;
-- Sep 11, 2014 9:57:38 AM ICT
INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,Version,AD_Column_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,IsKey,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,ColumnName,Description,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,IsToolbarButton,IsAlwaysUpdateable,AD_Client_ID,EntityType,IsEncrypted,IsSecure,AD_Element_ID,AD_Reference_ID,AD_Reference_Value_ID,AD_Table_ID,AD_Val_Rule_ID) VALUES (0,'N',0,211765,'N','N','N',0,'N',10,'N','N','N','Y','e03bf0ab-df24-4a01-80b8-92e61d11188c','Y','ParentRelatedColumn_ID','column in parent info window, link with column in this relate info','default column RelatedColumn in Relate Info window will link with key column of main info window
column define in ParentRelatedColumn will replace key column','Parent Related Column','Y',TO_DATE('2014-09-11 09:57:33','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2014-09-11 09:57:33','YYYY-MM-DD HH24:MI:SS'),100,'N','N',0,'D','N','N',202792,18,200072,200089,200065)
;
-- Sep 11, 2014 9:58:27 AM ICT
UPDATE AD_Column SET FKConstraintName='ParentRelatedColumn_ADInfoRela', FKConstraintType='N',Updated=TO_DATE('2014-09-11 09:58:27','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=211765
;
-- Sep 11, 2014 9:58:27 AM ICT
ALTER TABLE AD_InfoRelated ADD ParentRelatedColumn_ID NUMBER(10) DEFAULT NULL
;
-- Sep 11, 2014 9:58:28 AM ICT
ALTER TABLE AD_InfoRelated ADD CONSTRAINT ParentRelatedColumn_ADInfoRela FOREIGN KEY (ParentRelatedColumn_ID) REFERENCES ad_infocolumn(ad_infocolumn_id) DEFERRABLE INITIALLY DEFERRED
;
-- Sep 11, 2014 10:00:39 AM ICT
INSERT INTO AD_Field (SortNo,IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,SeqNo,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,CreatedBy,Updated,IsActive,IsDisplayedGrid,SeqNoGrid,XPosition,IsQuickEntry,AD_Client_ID,ColumnSpan,NumLines,IsAdvancedField,IsDefaultFocus,AD_Column_ID,EntityType,Created) VALUES (0,'N',200100,0,'N','N',110,'Y',203446,'N','default column RelatedColumn in Relate Info window will link with key column of main info window
column define in ParentRelatedColumn will replace key column','column in parent info window, link with column in this relate info','Parent Related Column','59dd442c-8596-4be5-b689-cd437ac62edf','Y','N',100,0,100,TO_DATE('2014-09-11 10:00:30','YYYY-MM-DD HH24:MI:SS'),'Y','Y',80,1,'N',0,1,1,'N','N',211765,'D',TO_DATE('2014-09-11 10:00:30','YYYY-MM-DD HH24:MI:SS'))
;
-- Sep 11, 2014 10:00:59 AM ICT
UPDATE AD_Field SET Name='Parent Link Column',Updated=TO_DATE('2014-09-11 10:00:59','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=203446
;
-- Sep 11, 2014 10:01:23 AM ICT
UPDATE AD_Field SET SeqNo=100, IsDisplayed='Y', XPosition=1, ColumnSpan=2,Updated=TO_DATE('2014-09-11 10:01:23','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=203446
;
-- Sep 11, 2014 10:01:23 AM ICT
UPDATE AD_Field SET SeqNo=110, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2014-09-11 10:01:23','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202268
;
-- Sep 11, 2014 10:01:23 AM ICT
UPDATE AD_Field SET SeqNo=0,Updated=TO_DATE('2014-09-11 10:01:23','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202269
;
SELECT register_migration_script('201411091604_IDEMPIERE-2152.sql') FROM dual
;

View File

@ -1,45 +0,0 @@
-- Sep 11, 2014 9:56:05 AM ICT
-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator
INSERT INTO AD_Element (ColumnName,AD_Element_ID,Help,Name,Description,PrintName,AD_Element_UU,AD_Org_ID,CreatedBy,UpdatedBy,IsActive,AD_Client_ID,EntityType,Created,Updated) VALUES ('ParentRelatedColumn_ID',202792,'default column RelatedColumn in Relate Info window will link with key column of main info window
column define in ParentRelatedColumn will replace key column','Parent Related Column','column in parent info window, link with column in this relate info','Parent Related Column','d35a2b4b-6022-4b52-bace-93f05958a77a',0,100,100,'Y',0,'D',TO_TIMESTAMP('2014-09-11 09:55:54','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2014-09-11 09:55:54','YYYY-MM-DD HH24:MI:SS'))
;
-- Sep 11, 2014 9:57:38 AM ICT
INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,Version,AD_Column_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,IsKey,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,ColumnName,Description,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,IsToolbarButton,IsAlwaysUpdateable,AD_Client_ID,EntityType,IsEncrypted,IsSecure,AD_Element_ID,AD_Reference_ID,AD_Reference_Value_ID,AD_Table_ID,AD_Val_Rule_ID) VALUES (0,'N',0,211765,'N','N','N',0,'N',10,'N','N','N','Y','e03bf0ab-df24-4a01-80b8-92e61d11188c','Y','ParentRelatedColumn_ID','column in parent info window, link with column in this relate info','default column RelatedColumn in Relate Info window will link with key column of main info window
column define in ParentRelatedColumn will replace key column','Parent Related Column','Y',TO_TIMESTAMP('2014-09-11 09:57:33','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2014-09-11 09:57:33','YYYY-MM-DD HH24:MI:SS'),100,'N','N',0,'D','N','N',202792,18,200072,200089,200065)
;
-- Sep 11, 2014 9:58:27 AM ICT
UPDATE AD_Column SET FKConstraintName='ParentRelatedColumn_ADInfoRela', FKConstraintType='N',Updated=TO_TIMESTAMP('2014-09-11 09:58:27','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=211765
;
-- Sep 11, 2014 9:58:27 AM ICT
ALTER TABLE AD_InfoRelated ADD COLUMN ParentRelatedColumn_ID NUMERIC(10) DEFAULT NULL
;
-- Sep 11, 2014 9:58:28 AM ICT
ALTER TABLE AD_InfoRelated ADD CONSTRAINT ParentRelatedColumn_ADInfoRela FOREIGN KEY (ParentRelatedColumn_ID) REFERENCES ad_infocolumn(ad_infocolumn_id) DEFERRABLE INITIALLY DEFERRED
;
-- Sep 11, 2014 10:00:39 AM ICT
INSERT INTO AD_Field (SortNo,IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,SeqNo,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,CreatedBy,Updated,IsActive,IsDisplayedGrid,SeqNoGrid,XPosition,IsQuickEntry,AD_Client_ID,ColumnSpan,NumLines,IsAdvancedField,IsDefaultFocus,AD_Column_ID,EntityType,Created) VALUES (0,'N',200100,0,'N','N',110,'Y',203446,'N','default column RelatedColumn in Relate Info window will link with key column of main info window
column define in ParentRelatedColumn will replace key column','column in parent info window, link with column in this relate info','Parent Related Column','59dd442c-8596-4be5-b689-cd437ac62edf','Y','N',100,0,100,TO_TIMESTAMP('2014-09-11 10:00:30','YYYY-MM-DD HH24:MI:SS'),'Y','Y',80,1,'N',0,1,1,'N','N',211765,'D',TO_TIMESTAMP('2014-09-11 10:00:30','YYYY-MM-DD HH24:MI:SS'))
;
-- Sep 11, 2014 10:00:59 AM ICT
UPDATE AD_Field SET Name='Parent Link Column',Updated=TO_TIMESTAMP('2014-09-11 10:00:59','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=203446
;
-- Sep 11, 2014 10:01:23 AM ICT
UPDATE AD_Field SET SeqNo=100, IsDisplayed='Y', XPosition=1, ColumnSpan=2,Updated=TO_TIMESTAMP('2014-09-11 10:01:23','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=203446
;
-- Sep 11, 2014 10:01:23 AM ICT
UPDATE AD_Field SET SeqNo=110, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2014-09-11 10:01:23','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202268
;
-- Sep 11, 2014 10:01:23 AM ICT
UPDATE AD_Field SET SeqNo=0,Updated=TO_TIMESTAMP('2014-09-11 10:01:23','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=202269
;
SELECT register_migration_script('201411091604_IDEMPIERE-2152.sql') FROM dual
;

View File

@ -1,38 +0,0 @@
/******************************************************************************
* Copyright (C) 2014 iDempiere *
* Product: iDempiere ERP & CRM Smart Business Solution *
* 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.model;
import org.compiere.model.MInfoColumn;
/**
*
* @author hieplq
* implement to provide InfoColumn
* example MInfoProcess, MInfoRelate
*
*/
public interface IInfoColumn {
/**
* Id of MInfoColumn
* @return
*/
public int getInfoColumnID ();
/**
* Object MInfoColumn
* @return
*/
public MInfoColumn getAD_InfoColumn ();
}

View File

@ -17,7 +17,6 @@ import java.sql.ResultSet;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import org.compiere.model.MInfoColumn;
import org.compiere.model.MProcess; import org.compiere.model.MProcess;
import org.compiere.model.X_AD_InfoProcess; import org.compiere.model.X_AD_InfoProcess;
import org.compiere.util.Env; import org.compiere.util.Env;
@ -30,12 +29,11 @@ import org.compiere.util.Evaluator;
* @author hieplq * @author hieplq
* *
*/ */
public class MInfoProcess extends X_AD_InfoProcess implements IInfoColumn { public class MInfoProcess extends X_AD_InfoProcess {
/** /**
* *
*/ */
private static final long serialVersionUID = 6603281032935632048L; private static final long serialVersionUID = 2478699719088685214L;
/** /**
* {@inheritDoc} * {@inheritDoc}
@ -91,20 +89,4 @@ public class MInfoProcess extends X_AD_InfoProcess implements IInfoColumn {
return retValue; return retValue;
} }
/**
* just forward call to {@link #getAD_InfoColumn_ID()}
*/
@Override
public int getInfoColumnID() {
return getAD_InfoColumn_ID();
}
/**
* Just forward call to {@link #getAD_InfoColumn ()}
*/
@Override
public MInfoColumn getAD_InfoColumn (){
return (MInfoColumn)super.getAD_InfoColumn();
}
} }

View File

@ -17,16 +17,16 @@ import java.sql.ResultSet;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import org.compiere.model.I_AD_InfoRelated;
import org.compiere.model.MInfoColumn; import org.compiere.model.MInfoColumn;
import org.compiere.model.Query; import org.compiere.model.Query;
import org.compiere.model.X_AD_InfoRelated; import org.compiere.model.X_AD_InfoRelated;
public class MInfoRelated extends X_AD_InfoRelated implements IInfoColumn { public class MInfoRelated extends X_AD_InfoRelated implements I_AD_InfoRelated {
/** /**
* *
*/ */
private static final long serialVersionUID = -4239930986439783006L; private static final long serialVersionUID = 7899684001732574833L;
public MInfoRelated(Properties ctx, int AD_InfoRelated_ID, String trxName) { public MInfoRelated(Properties ctx, int AD_InfoRelated_ID, String trxName) {
super(ctx, AD_InfoRelated_ID, trxName); super(ctx, AD_InfoRelated_ID, trxName);
@ -54,20 +54,4 @@ public class MInfoRelated extends X_AD_InfoRelated implements IInfoColumn {
return ""; return "";
} }
/**
* Just forward call to {@link #getParentRelatedColumn_ID()}
*/
@Override
public int getInfoColumnID() {
return getParentRelatedColumn_ID();
}
/**
* Just forward call to {@link #getParentRelatedColumn()}
*/
@Override
public MInfoColumn getAD_InfoColumn (){
return (MInfoColumn) getParentRelatedColumn();
}
} }

View File

@ -163,21 +163,6 @@ public interface I_AD_InfoRelated
*/ */
public String getName(); public String getName();
/** Column name ParentRelatedColumn_ID */
public static final String COLUMNNAME_ParentRelatedColumn_ID = "ParentRelatedColumn_ID";
/** Set Parent Related Column.
* column in parent info window, link with column in this relate info
*/
public void setParentRelatedColumn_ID (int ParentRelatedColumn_ID);
/** Get Parent Related Column.
* column in parent info window, link with column in this relate info
*/
public int getParentRelatedColumn_ID();
public org.compiere.model.I_AD_InfoColumn getParentRelatedColumn() throws RuntimeException;
/** Column name RelatedColumn_ID */ /** Column name RelatedColumn_ID */
public static final String COLUMNNAME_RelatedColumn_ID = "RelatedColumn_ID"; public static final String COLUMNNAME_RelatedColumn_ID = "RelatedColumn_ID";

View File

@ -30,7 +30,7 @@ public class X_AD_InfoRelated extends PO implements I_AD_InfoRelated, I_Persiste
/** /**
* *
*/ */
private static final long serialVersionUID = 20141112L; private static final long serialVersionUID = 20141030L;
/** Standard Constructor */ /** Standard Constructor */
public X_AD_InfoRelated (Properties ctx, int AD_InfoRelated_ID, String trxName) public X_AD_InfoRelated (Properties ctx, int AD_InfoRelated_ID, String trxName)
@ -198,34 +198,6 @@ public class X_AD_InfoRelated extends PO implements I_AD_InfoRelated, I_Persiste
return new KeyNamePair(get_ID(), getName()); return new KeyNamePair(get_ID(), getName());
} }
public org.compiere.model.I_AD_InfoColumn getParentRelatedColumn() throws RuntimeException
{
return (org.compiere.model.I_AD_InfoColumn)MTable.get(getCtx(), org.compiere.model.I_AD_InfoColumn.Table_Name)
.getPO(getParentRelatedColumn_ID(), get_TrxName()); }
/** Set Parent Related Column.
@param ParentRelatedColumn_ID
column in parent info window, link with column in this relate info
*/
public void setParentRelatedColumn_ID (int ParentRelatedColumn_ID)
{
if (ParentRelatedColumn_ID < 1)
set_Value (COLUMNNAME_ParentRelatedColumn_ID, null);
else
set_Value (COLUMNNAME_ParentRelatedColumn_ID, Integer.valueOf(ParentRelatedColumn_ID));
}
/** Get Parent Related Column.
@return column in parent info window, link with column in this relate info
*/
public int getParentRelatedColumn_ID ()
{
Integer ii = (Integer)get_Value(COLUMNNAME_ParentRelatedColumn_ID);
if (ii == null)
return 0;
return ii.intValue();
}
public org.compiere.model.I_AD_InfoColumn getRelatedColumn() throws RuntimeException public org.compiere.model.I_AD_InfoColumn getRelatedColumn() throws RuntimeException
{ {
return (org.compiere.model.I_AD_InfoColumn)MTable.get(getCtx(), org.compiere.model.I_AD_InfoColumn.Table_Name) return (org.compiere.model.I_AD_InfoColumn)MTable.get(getCtx(), org.compiere.model.I_AD_InfoColumn.Table_Name)

View File

@ -34,6 +34,7 @@ import java.text.MessageFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
@ -2335,14 +2336,13 @@ public final class DB
* @param selection * @param selection
* @param trxName * @param trxName
*/ */
public static void createT_SelectionNew (int AD_PInstance_ID, Collection<KeyNamePair> saveKeys, String trxName) public static void createT_Selection(int AD_PInstance_ID, Map<Integer, List<String>> saveKeys, int viewIDIndex, String trxName)
{ {
StringBuilder insert = new StringBuilder(); StringBuilder insert = new StringBuilder();
insert.append("INSERT INTO T_SELECTION(AD_PINSTANCE_ID, T_SELECTION_ID, ViewID) "); insert.append("INSERT INTO T_SELECTION(AD_PINSTANCE_ID, T_SELECTION_ID, ViewID) ");
int counter = 0; int counter = 0;
for(KeyNamePair saveKey : saveKeys) for(Integer selectedId : saveKeys.keySet())
{ {
Integer selectedId = saveKey.getKey();
counter++; counter++;
if (counter > 1) if (counter > 1)
insert.append(" UNION "); insert.append(" UNION ");
@ -2352,13 +2352,13 @@ public final class DB
insert.append(selectedId); insert.append(selectedId);
insert.append(", "); insert.append(", ");
String viewIDValue = saveKey.getName(); List<String> viewIDValues = saveKeys.get(selectedId);
// when no process have viewID or this process have no viewID or value of viewID is null // when no process have viewID or this process have no viewID or value of viewID is null
if (viewIDValue == null){ if (viewIDValues == null || viewIDIndex < 0 || viewIDValues.get(viewIDIndex) == null){
insert.append("NULL"); insert.append("NULL");
}else{ }else{
insert.append("'"); insert.append("'");
insert.append(viewIDValue); insert.append(viewIDValues.get(viewIDIndex));
insert.append("'"); insert.append("'");
} }

View File

@ -14,8 +14,6 @@
package test.functional; package test.functional;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@ -28,7 +26,6 @@ import org.compiere.model.Query;
import org.compiere.model.X_AD_Element; import org.compiere.model.X_AD_Element;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.compiere.util.KeyNamePair;
import test.AdempiereTestCase; import test.AdempiereTestCase;
@ -290,11 +287,11 @@ public class QueryTest extends AdempiereTestCase
assertTrue(AD_PInstance_ID > 0); assertTrue(AD_PInstance_ID > 0);
// Create selection list // Create selection list
List<KeyNamePair> elements = new ArrayList<KeyNamePair> (); Map<Integer, List<String>> elements = new HashMap<Integer, List<String>> ();
elements.add(new KeyNamePair(102, null)); // AD_Element_ID=102 => AD_Client_ID elements.put(102, null); // AD_Element_ID=102 => AD_Client_ID
elements.add(new KeyNamePair(104, null)); // AD_Element_ID=104 => AD_Column_ID elements.put(104, null); // AD_Element_ID=104 => AD_Column_ID
DB.executeUpdateEx("DELETE FROM T_Selection WHERE AD_PInstance_ID="+AD_PInstance_ID, getTrxName()); DB.executeUpdateEx("DELETE FROM T_Selection WHERE AD_PInstance_ID="+AD_PInstance_ID, getTrxName());
DB.createT_SelectionNew (AD_PInstance_ID, elements, getTrxName()); DB.createT_Selection(AD_PInstance_ID, elements, 0, getTrxName());
String whereClause = "1=1"; // some dummy where clause String whereClause = "1=1"; // some dummy where clause
int[] ids = new Query(getCtx(), X_AD_Element.Table_Name, whereClause, getTrxName()) int[] ids = new Query(getCtx(), X_AD_Element.Table_Name, whereClause, getTrxName())
@ -303,9 +300,12 @@ public class QueryTest extends AdempiereTestCase
.getIDs(); .getIDs();
assertEquals("Resulting number of elements differ", elements.size(), ids.length); assertEquals("Resulting number of elements differ", elements.size(), ids.length);
for (int i = 0; i < elements.size(); i++) Integer[] keys = new Integer[elements.keySet().size()];
keys = elements.keySet().toArray(keys);
for (int i = 0; i < keys .length; i++)
{ {
int expected = elements.get(i).getKey(); int expected = keys[i];
assertEquals("Element "+i+" not equals", expected, ids[i]); assertEquals("Element "+i+" not equals", expected, ids[i]);
} }
} }

View File

@ -14,7 +14,6 @@ import java.util.Properties;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.logging.Level; import java.util.logging.Level;
import org.adempiere.model.IInfoColumn;
import org.adempiere.model.MInfoProcess; import org.adempiere.model.MInfoProcess;
import org.adempiere.model.MInfoRelated; import org.adempiere.model.MInfoRelated;
import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.AdempiereWebUI;
@ -97,7 +96,7 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
/** /**
* *
*/ */
private static final long serialVersionUID = 2751982942639167289L; private static final long serialVersionUID = -2192106603768665006L;
protected Grid parameterGrid; protected Grid parameterGrid;
private Borderlayout layout; private Borderlayout layout;
@ -160,11 +159,7 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
int row = contentPanel.getSelectedRow(); int row = contentPanel.getSelectedRow();
if (row >= 0) { if (row >= 0) {
for (EmbedWinInfo embed : embeddedWinList) { for (EmbedWinInfo embed : embeddedWinList) {
int indexData = 0; refresh(contentPanel.getValueAt(row,0),embed);
if (columnDataIndex.containsKey(embed.getParentLinkColumnID())){
indexData = p_layout.length + columnDataIndex.get(embed.getParentLinkColumnID());
}
refresh(contentPanel.getValueAt(row,indexData),embed);
}// refresh for all }// refresh for all
} }
} }
@ -524,7 +519,7 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
return false; return false;
// topinfoColumns = infoWindow.getInfoColumns(); // topinfoColumns = infoWindow.getInfoColumns();
relatedInfoList = infoWindow.getInfoRelated(true); MInfoRelated[] relatedInfoList = infoWindow.getInfoRelated(true);
Tabpanels tabPanels = new Tabpanels(); Tabpanels tabPanels = new Tabpanels();
Tabs tabs = new Tabs(); Tabs tabs = new Tabs();
@ -578,9 +573,8 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
embeddedTbl.getModel().addTableModelListener(this); embeddedTbl.getModel().addTableModelListener(this);
embeddedTbl.setVflex("1"); embeddedTbl.setVflex("1");
//Xolali - add embeddedTbl to list, add m_sqlembedded to list //Xolali - add embeddedTbl to list, add m_sqlembedded to list
EmbedWinInfo ewinInfo = new EmbedWinInfo(embedInfo,embeddedTbl,m_sqlEmbedded,relatedInfo.getLinkColumnName(), relatedInfo.getLinkInfoColumn(), relatedInfo.getParentRelatedColumn_ID()); EmbedWinInfo ewinInfo = new EmbedWinInfo(embedInfo,embeddedTbl,m_sqlEmbedded,relatedInfo.getLinkColumnName(), relatedInfo.getLinkInfoColumn());
embeddedWinList.add(ewinInfo); embeddedWinList.add(ewinInfo);
MInfoWindow riw = (MInfoWindow) relatedInfo.getRelatedInfo(); MInfoWindow riw = (MInfoWindow) relatedInfo.getRelatedInfo();
@ -900,7 +894,6 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
addViewIDToQuery(); addViewIDToQuery();
if (m_sqlMain.length() > 0 && infoWindow.isDistinct()) { if (m_sqlMain.length() > 0 && infoWindow.isDistinct()) {
m_sqlMain = m_sqlMain.substring("SELECT ".length()); m_sqlMain = m_sqlMain.substring("SELECT ".length());
m_sqlMain = "SELECT DISTINCT " + m_sqlMain; m_sqlMain = "SELECT DISTINCT " + m_sqlMain;
@ -921,58 +914,46 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
* if main query have subquery in SELECT, it will beak or incorrect * if main query have subquery in SELECT, it will beak or incorrect
*/ */
protected void addViewIDToQuery () { protected void addViewIDToQuery () {
m_sqlMain = addMoreColumnToQuery (m_sqlMain, infoProcessList);
}
if (m_sqlMain.length() > 0 && infoProcessList != null && infoProcessList.length > 0){
int fromIndex = m_sqlMain.indexOf("FROM");
// split Select and from clause
String selectClause = m_sqlMain.substring(0, fromIndex);
String fromClause = m_sqlMain.substring(fromIndex);
/** // get alias of main table
* because data of infoColumn have isDisplay = false not load, StringBuilder sqlBuilder = new StringBuilder(selectClause);
* just display column is load to show in List.
* Some function receive data from hidden column as viewID in infoProcess
* or parentLink of infoRelateWindow.
*
* this function just add column name of hidden infoWindow to end of query
* @param sqlMain main sql to append column
* @param listInfoColumn list of PO contain infoColumnID, this infoColumnID will add to query
* @return sql after append column
*/
protected String addMoreColumnToQuery (String sqlMain, IInfoColumn [] listInfoColumn) {
if (sqlMain == null || sqlMain.length() == 0 || listInfoColumn == null || listInfoColumn.length == 0){
return sqlMain;
}
int fromIndex = sqlMain.indexOf("FROM"); // reset flag relate viewID to recount
// split Select and from clause numOfViewID = 0;
String selectClause = sqlMain.substring(0, fromIndex); isHasViewID = false;
String fromClause = sqlMain.substring(fromIndex);
// get alias of main table // add View_ID column to select clause
StringBuilder sqlBuilder = new StringBuilder(selectClause); for (MInfoProcess infoProcess : infoProcessList) {
StringBuilder sqlColumn = new StringBuilder(); // this process hasn't viewID column, next other infoProcess
if (infoProcess.getAD_InfoColumn_ID() <= 0)
continue;
// add View_ID column to select clause MInfoColumn infocol = (MInfoColumn) infoProcess.getAD_InfoColumn();
for (IInfoColumn infoProcess : listInfoColumn) { // maintain varial relate to ViewID, it can init just one time when load infoWindow define
// this process hasn't viewID column, next other infoProcess // but let it here for simple logic control
if (infoProcess.getInfoColumnID() <= 0) numOfViewID++;
continue; isHasViewID = true;
MInfoColumn infocol = (MInfoColumn) infoProcess.getAD_InfoColumn(); if (! infocol.isDisplayed()) {
// add column to SELECT clause of main sql
if (! infocol.isDisplayed()) { sqlBuilder.append(", ");
sqlColumn.append(", ").append(infocol.getSelectClause()).append(" AS ").append(infocol.getColumnName()).append(" "); sqlBuilder.append (infocol.getSelectClause());
// add column to SELECT clause of main sql, if query is include this viewID column, not need add sqlBuilder.append(" AS ");
if (!sqlBuilder.toString().contains(sqlColumn)){ sqlBuilder.append (infocol.getColumnName());
sqlBuilder.append(sqlColumn); sqlBuilder.append(" ");
} }
sqlColumn.delete(0, sqlColumn.length());
} }
sqlBuilder.append(fromClause);
// update main sql
m_sqlMain = sqlBuilder.toString();
} }
sqlBuilder.append(fromClause);
// update main sql
return sqlBuilder.toString();
} }
protected void renderWindow() protected void renderWindow()
@ -1665,32 +1646,13 @@ public class InfoWindow extends InfoPanel implements ValueChangeListener, EventL
sql.append(relatedInfo.getInfoSql()); // delete get sql method from MInfoWindow sql.append(relatedInfo.getInfoSql()); // delete get sql method from MInfoWindow
if (log.isLoggable(Level.FINEST)) if (log.isLoggable(Level.FINEST))
log.finest(sql.toString()); log.finest(sql.toString());
IDColumn ID = (IDColumn) obj;
Object linkPara = null;
if (obj != null && obj instanceof IDColumn){
IDColumn ID = (IDColumn) obj;
linkPara = ID.getRecord_ID();
}else if (obj != null){
linkPara = obj.toString();
}else {
//TODO:hard case
}
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
ResultSet rs = null; ResultSet rs = null;
try try
{ {
pstmt = DB.prepareStatement(relatedInfo.getInfoSql(), null); pstmt = DB.prepareStatement(relatedInfo.getInfoSql(), null);
//TODO: implicit type conversion. will exception in some case must recheck pstmt.setObject(1, ID.getRecord_ID());
if (relatedInfo.getTypeDataOfLink().equals(String.class)){
pstmt.setString(1, (String)linkPara);
}else if (relatedInfo.getTypeDataOfLink().equals(int.class)){
pstmt.setInt(1, Integer.parseInt(linkPara.toString()));
}else{
pstmt.setObject(1, linkPara);
}
rs = pstmt.executeQuery(); rs = pstmt.executeQuery();
loadEmbedded(rs, relatedInfo); loadEmbedded(rs, relatedInfo);
} }

View File

@ -33,9 +33,7 @@ import java.util.Map;
import java.util.Vector; import java.util.Vector;
import java.util.logging.Level; import java.util.logging.Level;
import org.adempiere.model.IInfoColumn;
import org.adempiere.model.MInfoProcess; import org.adempiere.model.MInfoProcess;
import org.adempiere.model.MInfoRelated;
import org.adempiere.webui.AdempiereWebUI; import org.adempiere.webui.AdempiereWebUI;
import org.adempiere.webui.LayoutUtils; import org.adempiere.webui.LayoutUtils;
import org.adempiere.webui.apps.AEnv; import org.adempiere.webui.apps.AEnv;
@ -113,11 +111,10 @@ import org.zkoss.zul.ext.Sortable;
*/ */
public abstract class InfoPanel extends Window implements EventListener<Event>, WTableModelListener, Sortable<Object>, IHelpContext public abstract class InfoPanel extends Window implements EventListener<Event>, WTableModelListener, Sortable<Object>, IHelpContext
{ {
/** /**
* *
*/ */
private static final long serialVersionUID = 6617464791677971237L; private static final long serialVersionUID = 6027970576265023451L;
private final static int DEFAULT_PAGE_SIZE = 100; private final static int DEFAULT_PAGE_SIZE = 100;
protected List<Button> btProcessList = new ArrayList<Button>(); protected List<Button> btProcessList = new ArrayList<Button>();
@ -126,9 +123,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
protected final static String ON_RUN_PROCESS = "onRunProcess"; protected final static String ON_RUN_PROCESS = "onRunProcess";
// attribute key of info process // attribute key of info process
protected final static String ATT_INFO_PROCESS_KEY = "INFO_PROCESS"; protected final static String ATT_INFO_PROCESS_KEY = "INFO_PROCESS";
protected int pageSize; protected int pageSize;
protected MInfoRelated[] relatedInfoList;
public static InfoPanel create (int WindowNo, public static InfoPanel create (int WindowNo,
String tableName, String keyColumn, String value, String tableName, String keyColumn, String value,
@ -358,28 +353,15 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
/** /**
* save selected id and viewID * save selected id and viewID
*/ */
protected Collection<KeyNamePair> m_viewIDMap = new ArrayList <KeyNamePair>(); protected Map<Integer, List<String>> m_viewIDMap = new HashMap<Integer, List<String>>();
/** /**
* store index of infoColumn have data append. each infoColumn just append only one time. * flag indicate have infoOProcess define ViewID
* index increase from 0.
*/ */
protected Map <Integer, Integer> columnDataIndex = new HashMap <Integer, Integer> (); protected boolean isHasViewID = false;
/** /**
* after load first record, set it to false. * number of infoProcess contain ViewID
* when need update index of column data append to end of list {@link #columnDataIndex}, set it to true
*/ */
protected boolean isMustUpdateColumnIndex = true; protected int numOfViewID = 0;
/**
* When start update index of column data append to end of list {@link #columnDataIndex}, reset it to 0,
* each read data for new append column, increase it up 1
*/
protected int indexColumnCount = 0;
/**
* to prevent append duplicate data, when begin read each record reset this list,
* when read a column store id of infoColumn to list to check duplicate
*/
protected List <Integer> lsReadedColumn = new ArrayList <Integer> ();
/** /**
* IDEMPIERE-1334 * IDEMPIERE-1334
@ -461,7 +443,6 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
private void readData(ResultSet rs) throws SQLException { private void readData(ResultSet rs) throws SQLException {
int colOffset = 1; // columns start with 1 int colOffset = 1; // columns start with 1
List<Object> data = new ArrayList<Object>(); List<Object> data = new ArrayList<Object>();
for (int col = 0; col < p_layout.length; col++) for (int col = 0; col < p_layout.length; col++)
{ {
Object value = null; Object value = null;
@ -530,78 +511,34 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
} }
data.add(value); data.add(value);
} }
line.add(data); line.add(data);
appendDataForViewID(rs, data, lsReadedColumn); readViewID(rs, data);
appendDataForParentLink(rs, data, lsReadedColumn);
} }
/** /**
* save data of all viewID column in infoProcessList to end of data line * save all viewID to end of data line
* when override {@link #readData(ResultSet)} consider call this method * when override readData(ResultSet rs), consider call this method
* IDEMPIERE-1970 * IDEMPIERE-1970
* @param rs record set to read data
* @param data data line to append
* @param listReadedColumn list column is appended
* @throws SQLException
*/ */
protected void appendDataForViewID(ResultSet rs, List<Object> data, List<Integer> listReadedColumn) throws SQLException { protected void readViewID(ResultSet rs, List<Object> data) throws SQLException {
appendInfoColumnData(rs, data, infoProcessList, listReadedColumn); if (infoProcessList == null || infoProcessList.length == 0) {
}
/**
* save data of all viewID column in infoProcessList to end of data line
* when override {@link #readData(ResultSet)} consider call this method
* IDEMPIERE-2152
* @param rs
* @param data
* @param listReadedColumn
* @throws SQLException
*/
protected void appendDataForParentLink(ResultSet rs, List<Object> data, List<Integer> listReadedColumn) throws SQLException {
appendInfoColumnData(rs, data, relatedInfoList, listReadedColumn);
}
/**
* save data of all infoColumn in listModelHaveInfoColumn to end of data line
* @param rs record set to read data
* @param data data line to append
* @param listModelHasInfoColumn
* @param listReadedColumn list column is appended
* @throws SQLException
*/
protected void appendInfoColumnData(ResultSet rs, List<Object> data, IInfoColumn [] listModelHasInfoColumn, List<Integer> listReadedColumn) throws SQLException {
if (listModelHasInfoColumn == null || listModelHasInfoColumn.length == 0) {
return; return;
} }
// get InfoColumn from each modelHaveInfoColumn, read it form resultSet by name and append to data line // with each process have viewID, read it form resultSet by name
for (IInfoColumn modelHasInfoColumn : listModelHasInfoColumn){ for (MInfoProcess infoProcess : infoProcessList){
// have no InfoColumn or this column is readed, read next column if (infoProcess.getAD_InfoColumn_ID() <= 0)
if (modelHasInfoColumn.getInfoColumnID() <= 0 || listReadedColumn.contains(modelHasInfoColumn.getInfoColumnID()))
continue; continue;
MInfoColumn infoColumnAppend = (MInfoColumn) modelHasInfoColumn.getAD_InfoColumn(); MInfoColumn infocol = (MInfoColumn) infoProcess.getAD_InfoColumn();
//TODO: improve read data to get data by data type of column. String viewIDValue = rs.getString(infocol.getColumnName());
String appendData = rs.getString(infoColumnAppend.getColumnName());
if (rs.wasNull()) { if (rs.wasNull()) {
data.add(null); data.add(null);
} else { } else {
data.add(appendData); data.add(viewIDValue);
} }
// when need update append column index, just update it.
if (isMustUpdateColumnIndex && !columnDataIndex.containsKey(modelHasInfoColumn.getInfoColumnID())){
columnDataIndex.put(modelHasInfoColumn.getInfoColumnID(), indexColumnCount);
indexColumnCount++;
}
// mark this column is readed
listReadedColumn.add(modelHasInfoColumn.getInfoColumnID());
} }
} }
protected void renderItems() protected void renderItems()
@ -738,17 +675,10 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
} }
int rowPointer = getCacheStart()-1; int rowPointer = getCacheStart()-1;
while (m_rs.next()) while (m_rs.next())
{ {
rowPointer++; rowPointer++;
// reset list column readed to start new round
lsReadedColumn.clear();
readData(m_rs); readData(m_rs);
// just set column index only one time.
isMustUpdateColumnIndex = false;
//check now of rows loaded, break if we hit the suppose end //check now of rows loaded, break if we hit the suppose end
if (m_useDatabasePaging && rowPointer >= cacheEnd) if (m_useDatabasePaging && rowPointer >= cacheEnd)
{ {
@ -1004,7 +934,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
/** /**
* Save selected id, viewID of all process to map viewIDMap to save into T_Selection * Save selected id, viewID of all process to map viewIDMap to save into T_Selection
*/ */
public Collection<KeyNamePair> getSaveKeys (int infoCulumnId){ public Map<Integer, List<String>> getSaveKeys (){
// clear result from prev time // clear result from prev time
m_viewIDMap.clear(); m_viewIDMap.clear();
@ -1032,17 +962,23 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
IDColumn dataColumn = (IDColumn)keyData; IDColumn dataColumn = (IDColumn)keyData;
if (infoCulumnId > 0){ if (isHasViewID){
// have viewID, get it // have viewID, get it
int dataIndex = columnDataIndex.get(infoCulumnId) + p_layout.length; List<String> viewIDValueList = new ArrayList <String> ();
String viewIDValue = null;
for (int viewIDIndex = 0; viewIDIndex < numOfViewID; viewIDIndex++){
// get row data from model
@SuppressWarnings("unchecked")
List<Object> selectedRowData = (List<Object>)contentPanel.getModel().get(rows[row]);
// view data store at end of data line
viewIDValue = (String)selectedRowData.get (contentPanel.getLayout().length + viewIDIndex);
viewIDValueList.add(viewIDValue);
}
// get row data from model m_viewIDMap.put(dataColumn.getRecord_ID(), viewIDValueList);
Object viewIDValue = contentPanel.getModel().getDataAt(rows[row], dataIndex);
m_viewIDMap.add (new KeyNamePair(dataColumn.getRecord_ID(), viewIDValue == null?null:viewIDValue.toString()));
}else{ }else{
// hasn't viewID, set viewID value is null // hasn't viewID, set viewID value collection is null
m_viewIDMap.add (new KeyNamePair(dataColumn.getRecord_ID(), null)); m_viewIDMap.put(dataColumn.getRecord_ID(), null);
} }
} }
@ -1540,7 +1476,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
ProcessModalDialog processModalDialog = (ProcessModalDialog)event.getTarget(); ProcessModalDialog processModalDialog = (ProcessModalDialog)event.getTarget();
if (DialogEvents.ON_BEFORE_RUN_PROCESS.equals(event.getName())){ if (DialogEvents.ON_BEFORE_RUN_PROCESS.equals(event.getName())){
// store in T_Selection table selected rows for Execute Process that retrieves from T_Selection in code. // store in T_Selection table selected rows for Execute Process that retrieves from T_Selection in code.
DB.createT_SelectionNew(pInstanceID, getSaveKeys(getInfoColumnIDFromProcess(processModalDialog.getAD_Process_ID())), DB.createT_Selection(pInstanceID, getSaveKeys(), getProcessIndex(processModalDialog.getAD_Process_ID()),
null); null);
}else if (ProcessModalDialog.ON_WINDOW_CLOSE.equals(event.getName())){ }else if (ProcessModalDialog.ON_WINDOW_CLOSE.equals(event.getName())){
if (processModalDialog.isCancel()){ if (processModalDialog.isCancel()){
@ -1581,15 +1517,19 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
} }
/** /**
* Get InfoColumnID of infoProcess have processID is processId * Get index of infoProcess have processId
* @param processId * @param processId
* @return value InfoColumnID, -1 when has not any map * @return
*/ */
protected int getInfoColumnIDFromProcess (int processId){ protected int getProcessIndex (int processId){
int index = 0;
for (int i = 0; i < infoProcessList.length; i++){ for (int i = 0; i < infoProcessList.length; i++){
if (infoProcessList[i].getAD_Process_ID() == processId){ if (infoProcessList[i].getAD_Process_ID() == processId){
return infoProcessList[i].getAD_InfoColumn_ID(); return index;
} }
// just increase index when process is have ViewID column
if (infoProcessList[i].getAD_InfoColumn_ID() > 0)
index++;
} }
return -1; return -1;
} }

View File

@ -23,10 +23,8 @@ public class EmbedWinInfo {
private String linkColumnSql; private String linkColumnSql;
private MInfoColumn linkInfoColumn; private MInfoColumn linkInfoColumn;
private String linkColumnName; private String linkColumnName;
private int parentLinkColumnID;
public EmbedWinInfo(MInfoWindow iw, IMiniTable mt, String isql, String linkName, MInfoColumn linkColumn, int parentLinkColumnID) { public EmbedWinInfo(MInfoWindow iw, IMiniTable mt, String isql, String linkName, MInfoColumn linkColumn) {
this.parentLinkColumnID = parentLinkColumnID;
infowin=iw; infowin=iw;
infoTbl=mt; infoTbl=mt;
infoSql=isql; infoSql=isql;
@ -60,16 +58,4 @@ public class EmbedWinInfo {
return linkColumnName; return linkColumnName;
} }
public int getParentLinkColumnID() {
return parentLinkColumnID;
}
public Class<?> getTypeDataOfLink (){
if (linkInfoColumn.getColumnName().lastIndexOf("_ID") > 0){
return int.class;
}else{
return String.class;
}
}
} }