IDEMPIERE-254 2Pack Stabilization and Enhancement

This commit is contained in:
Heng Sin Low 2012-05-02 14:44:19 +08:00
parent 008acb6848
commit ae747cd47c
59 changed files with 2309 additions and 1313 deletions

View File

@ -863,7 +863,7 @@ public abstract class PO
* @param value value * @param value value
* @return true if value set * @return true if value set
*/ */
protected final boolean set_ValueNoCheck (String ColumnName, Object value) public final boolean set_ValueNoCheck (String ColumnName, Object value)
{ {
int index = get_ColumnIndex(ColumnName); int index = get_ColumnIndex(ColumnName);
if (index < 0) if (index < 0)

View File

@ -164,6 +164,10 @@
class="org.adempiere.pipo2.handler.ReferenceTableElementHandler" class="org.adempiere.pipo2.handler.ReferenceTableElementHandler"
id="AD_Ref_Table"> id="AD_Ref_Table">
</handler> </handler>
<handler
class="org.adempiere.pipo2.handler.AttachmentElementHandler"
id="AD_Attachment">
</handler>
<handler <handler
class="org.adempiere.pipo2.handler.CommonTranslationHandler" class="org.adempiere.pipo2.handler.CommonTranslationHandler"
id="table.translationHandler"> id="table.translationHandler">

View File

@ -19,11 +19,11 @@ package org.adempiere.pipo2.handler;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -44,19 +44,19 @@ public class AdElementHandler extends AbstractElementHandler {
private final String AD_ELEMENT = "AD_Element"; private final String AD_ELEMENT = "AD_Element";
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
String action = null; String action = null;
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
String ColumnName = getStringValue(element, "ColumnName"); String ColumnName = getStringValue(element, "ColumnName");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
M_Element mElement = findPO(ctx, element); M_Element mElement = findPO(ctx, element);
if (mElement == null) { if (mElement == null) {
int id = findIdByColumn(ctx, X_AD_Element.Table_Name, X_AD_Element.COLUMNNAME_ColumnName, ColumnName); int id = findIdByColumn(ctx, X_AD_Element.Table_Name, X_AD_Element.COLUMNNAME_ColumnName, ColumnName, /*ignorecase=*/true);
mElement = new M_Element(ctx, id, getTrxName(ctx)); mElement = new M_Element(ctx.ctx, id, getTrxName(ctx));
} }
List<String> excludes = defaultExcludeList(X_AD_Element.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Element.Table_Name);
if (mElement.getAD_Element_ID() == 0 && isOfficialId(element, "AD_Element_ID")) if (mElement.getAD_Element_ID() == 0 && isOfficialId(element, "AD_Element_ID"))
@ -71,6 +71,7 @@ public class AdElementHandler extends AbstractElementHandler {
List<String> notfounds = pf.autoFill(excludes); List<String> notfounds = pf.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -94,7 +95,7 @@ public class AdElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, mElement.getName(), logImportDetail(ctx, impDetail, 0, mElement.getName(),
mElement.get_ID(), action); mElement.get_ID(), action);
throw new POSaveFailedException("Reference"); throw new POSaveFailedException("Failed to save Element " + mElement.getName());
} }
} }
} else { } else {
@ -102,14 +103,14 @@ public class AdElementHandler extends AbstractElementHandler {
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
protected void create(Properties ctx, TransformerHandler document) protected void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int adElement_id = Env.getContextAsInt(ctx, int adElement_id = Env.getContextAsInt(ctx.ctx,
X_AD_Element.COLUMNNAME_AD_Element_ID); X_AD_Element.COLUMNNAME_AD_Element_ID);
if (processedElements.contains(adElement_id)) if (processedElements.contains(adElement_id))
@ -117,18 +118,22 @@ public class AdElementHandler extends AbstractElementHandler {
processedElements.add(adElement_id); processedElements.add(adElement_id);
X_AD_Element m_AdElement = new X_AD_Element(ctx, adElement_id, null); X_AD_Element mAdElement = new X_AD_Element(ctx.ctx, adElement_id, null);
if (ctx.packOut.getFromDate() != null) {
if (mAdElement.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", "AD_Element", atts); document.startElement("", "", "AD_Element", atts);
createAdElementBinding(ctx, document, m_AdElement); createAdElementBinding(ctx, document, mAdElement);
PackOut packOut = (PackOut)ctx.get("PackOutProcess");
PackOut packOut = ctx.packOut;
try{ try{
new CommonTranslationHandler().packOut(packOut,document,null,m_AdElement.get_ID()); new CommonTranslationHandler().packOut(packOut,document,null,mAdElement.get_ID());
} }
catch(Exception e) catch(Exception e)
{ {
@ -139,7 +144,7 @@ public class AdElementHandler extends AbstractElementHandler {
} }
private void createAdElementBinding(Properties ctx, TransformerHandler document, private void createAdElementBinding(PIPOContext ctx, TransformerHandler document,
X_AD_Element m_AdElement) { X_AD_Element m_AdElement) {
PoExporter filler = new PoExporter(ctx, document, m_AdElement); PoExporter filler = new PoExporter(ctx, document, m_AdElement);
@ -152,8 +157,8 @@ public class AdElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Element.COLUMNNAME_AD_Element_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_Element.COLUMNNAME_AD_Element_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_Element.COLUMNNAME_AD_Element_ID); packout.getCtx().ctx.remove(X_AD_Element.COLUMNNAME_AD_Element_ID);
} }
} }

View File

@ -0,0 +1,178 @@
/******************************************************************************
* 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. *
*
* Copyright (C) 2005 Robert Klein. robeklein@hotmail.com
* Contributor(s): Low Heng Sin hengsin@avantz.com
*****************************************************************************/
package org.adempiere.pipo2.handler;
import java.util.ArrayList;
import java.util.List;
import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.ElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PackOut;
import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.PoFiller;
import org.adempiere.pipo2.ReferenceUtils;
import org.adempiere.pipo2.exception.POSaveFailedException;
import org.compiere.model.MAttachment;
import org.compiere.model.PO;
import org.compiere.model.X_AD_Attachment;
import org.compiere.model.X_AD_AttachmentNote;
import org.compiere.model.X_AD_Package_Imp_Detail;
import org.compiere.util.DB;
import org.compiere.util.Env;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
public class AttachmentElementHandler extends AbstractElementHandler {
private List<Integer> attachments = new ArrayList<Integer>();
public void startElement(PIPOContext ctx, Element element)
throws SAXException {
String action = null;
MAttachment mAttachment = findPO(ctx, element);
if (mAttachment == null) {
int AD_Table_ID = ReferenceUtils.resolveReference(ctx.ctx, element.properties.get("AD_Table_ID"), getTrxName(ctx));
if (AD_Table_ID <= 0) {
element.defer = true;
element.unresolved = "AD_Table_ID";
return;
}
Element recordElement = element.properties.get("Record_ID");
int Record_ID = ReferenceUtils.resolveReference(ctx.ctx, recordElement, getTrxName(ctx));
if (Record_ID <= 0) {
element.defer = true;
element.unresolved = "Record_ID";
return;
}
int id = DB.getSQLValue(getTrxName(ctx), "SELECT AD_Attachment_ID FROM AD_Attachment WHERE Record_ID="+Record_ID+" AND AD_Table_ID="+AD_Table_ID);
mAttachment = new MAttachment(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
if (mAttachment.is_new()) {
mAttachment.setAD_Table_ID(AD_Table_ID);
mAttachment.setRecord_ID(Record_ID);
}
}
List<String> excludes = defaultExcludeList(X_AD_Attachment.Table_Name);
excludes.add("AD_Table_ID");
excludes.add("Record_ID");
if (mAttachment.getAD_Attachment_ID() == 0 && isOfficialId(element, "AD_Attachment_ID"))
mAttachment.setAD_Attachment_ID(getIntValue(element, "AD_Attachment_ID"));
if (attachments.contains(mAttachment.getAD_Attachment_ID())) {
element.skip = true;
return;
}
PoFiller pf = new PoFiller(ctx, mAttachment, element, this);
List<String> notfounds = pf.autoFill(excludes);
if (notfounds.size() > 0) {
element.defer = true;
element.unresolved = notfounds.toString();
return;
}
mAttachment.getEntries();
if (mAttachment.is_new() || mAttachment.is_Changed()) {
X_AD_Package_Imp_Detail impDetail = createImportDetail(ctx, element.qName, X_AD_Attachment.Table_Name, X_AD_Attachment.Table_ID);
if (!mAttachment.is_new()) {
backupRecord(ctx, impDetail.getAD_Package_Imp_Detail_ID(), X_AD_Attachment.Table_Name, mAttachment);
action = "Update";
} else {
action = "New";
}
if (mAttachment.save(getTrxName(ctx)) == true) {
logImportDetail(ctx, impDetail, 1, mAttachment.toString(),
mAttachment.get_ID(), action);
element.recordId = mAttachment.getAD_Attachment_ID();
attachments.add(mAttachment.getAD_Attachment_ID());
} else {
logImportDetail(ctx, impDetail, 0, mAttachment.toString(),
mAttachment.get_ID(), action);
throw new POSaveFailedException("Failed to save Attachment " + mAttachment.toString());
}
}
}
public void endElement(PIPOContext ctx, Element element) throws SAXException {
}
protected void create(PIPOContext ctx, TransformerHandler document)
throws SAXException {
int AD_Attachment_ID = Env.getContextAsInt(ctx.ctx, "AD_Attachment_ID");
if (attachments.contains(AD_Attachment_ID))
return;
attachments.add(AD_Attachment_ID);
MAttachment mAttachment = new MAttachment(ctx.ctx, AD_Attachment_ID, getTrxName(ctx));
if (ctx.packOut.getFromDate() != null) {
if (mAttachment.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table");
document.startElement("", "", "AD_Attachment", atts);
createAttachmentBinding(ctx, document, mAttachment);
int[] ids = PO.getAllIDs(X_AD_AttachmentNote.Table_Name, "AD_Attachment_ID="+AD_Attachment_ID, getTrxName(ctx));
if (ids != null && ids.length > 0) {
ElementHandler handler = ctx.packOut.getHandler(X_AD_AttachmentNote.Table_Name);
for (int AD_AttachmentNote_ID : ids ) {
try {
handler.packOut(ctx.packOut, document, null, AD_AttachmentNote_ID);
} catch (Exception e) {
throw new SAXException(e);
}
}
}
document.endElement("", "", "AD_Attachment");
}
private void createAttachmentBinding(PIPOContext ctx, TransformerHandler document,
MAttachment mAttachment) {
PoExporter filler = new PoExporter(ctx, document, mAttachment);
if (mAttachment.getAD_Attachment_ID() <= PackOut.MAX_OFFICIAL_ID)
filler.add("AD_Attachment_ID", new AttributesImpl());
List<String> excludes = defaultExcludeList(X_AD_Attachment.Table_Name);
filler.export(excludes);
}
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{
packout.getCtx().ctx.put("AD_Attachment_ID", recordId);
this.create(packout.getCtx(), packoutHandler);
packout.getCtx().ctx.remove("AD_Attachment_ID");
}
}

View File

@ -28,7 +28,6 @@ import java.io.OutputStream;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
@ -44,12 +43,13 @@ import org.xml.sax.helpers.AttributesImpl;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.CodeSnippetElementParameters; import org.adempiere.pipo2.CodeSnippetElementParameters;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
import org.adempiere.pipo2.PackoutItem; import org.adempiere.pipo2.PackoutItem;
public class CodeSnippetElementHandler extends AbstractElementHandler { public class CodeSnippetElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
String action = null; String action = null;
action = "Update"; action = "Update";
String releaseNumber = getStringValue(element, "ReleaseNo"); String releaseNumber = getStringValue(element, "ReleaseNo");
@ -68,7 +68,7 @@ public class CodeSnippetElementHandler extends AbstractElementHandler {
//get adempiere-all directory //get adempiere-all directory
try { try {
packagePath = getPackageDirectory(ctx); packagePath = getPackageDirectory(ctx.ctx);
File parentDirectory = new File(packagePath); File parentDirectory = new File(packagePath);
while (!parentDirectory.getName().equals("packages")){ while (!parentDirectory.getName().equals("packages")){
parentDirectory = parentDirectory.getParentFile(); parentDirectory = parentDirectory.getParentFile();
@ -144,9 +144,9 @@ public class CodeSnippetElementHandler extends AbstractElementHandler {
} }
//Record in transaction file //Record in transaction file
X_AD_Package_Imp_Backup backup = new X_AD_Package_Imp_Backup(ctx, 0, getTrxName(ctx)); X_AD_Package_Imp_Backup backup = new X_AD_Package_Imp_Backup(ctx.ctx, 0, getTrxName(ctx));
backup.setAD_Org_ID(Env.getAD_Org_ID(ctx)); backup.setAD_Org_ID(Env.getAD_Org_ID(ctx.ctx));
backup.setAD_Package_Imp_ID(getPackageImpId(ctx)); backup.setAD_Package_Imp_ID(getPackageImpId(ctx.ctx));
backup.setAD_Package_Imp_Org_Dir(targetDirectoryModified+sourceName ); backup.setAD_Package_Imp_Org_Dir(targetDirectoryModified+sourceName );
backup.setAD_Package_Imp_Bck_Dir(packagePath+File.separator+"backup"+File.separator+fileDate+"_"+sourceName); backup.setAD_Package_Imp_Bck_Dir(packagePath+File.separator+"backup"+File.separator+fileDate+"_"+sourceName);
backup.saveEx(); backup.saveEx();
@ -189,18 +189,18 @@ public class CodeSnippetElementHandler extends AbstractElementHandler {
} }
public void endElement(Properties ctx, Element element) public void endElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext pipoContext, TransformerHandler document)
throws SAXException { throws SAXException {
String FileDir = Env.getContext(ctx, CodeSnippetElementParameters.DESTINATION_DIRECTORY); String FileDir = Env.getContext(pipoContext.ctx, CodeSnippetElementParameters.DESTINATION_DIRECTORY);
String FileName = Env.getContext(ctx, CodeSnippetElementParameters.DESTINATION_FILE_NAME); String FileName = Env.getContext(pipoContext.ctx, CodeSnippetElementParameters.DESTINATION_FILE_NAME);
String OldCode = Env.getContext(ctx, CodeSnippetElementParameters.AD_Package_Code_Old); String OldCode = Env.getContext(pipoContext.ctx, CodeSnippetElementParameters.AD_Package_Code_Old);
String NewCode = Env.getContext(ctx, CodeSnippetElementParameters.AD_Package_Code_New); String NewCode = Env.getContext(pipoContext.ctx, CodeSnippetElementParameters.AD_Package_Code_New);
String ReleaseNo = Env.getContext(ctx, CodeSnippetElementParameters.RELEASE_NO); String ReleaseNo = Env.getContext(pipoContext.ctx, CodeSnippetElementParameters.RELEASE_NO);
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "custom"); addTypeName(atts, "custom");
createSnipitBinding(atts, FileDir, FileName, OldCode, NewCode, ReleaseNo); createSnipitBinding(atts, FileDir, FileName, OldCode, NewCode, ReleaseNo);
@ -232,16 +232,16 @@ public class CodeSnippetElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
PackoutItem detail = packout.getCurrentPackoutItem(); PackoutItem detail = packout.getCurrentPackoutItem();
Env.setContext(packout.getCtx(), CodeSnippetElementParameters.DESTINATION_DIRECTORY, (String)detail.getProperty(CodeSnippetElementParameters.DESTINATION_DIRECTORY)); Env.setContext(packout.getCtx().ctx, CodeSnippetElementParameters.DESTINATION_DIRECTORY, (String)detail.getProperty(CodeSnippetElementParameters.DESTINATION_DIRECTORY));
Env.setContext(packout.getCtx(), CodeSnippetElementParameters.DESTINATION_FILE_NAME, (String)detail.getProperty(CodeSnippetElementParameters.DESTINATION_FILE_NAME)); Env.setContext(packout.getCtx().ctx, CodeSnippetElementParameters.DESTINATION_FILE_NAME, (String)detail.getProperty(CodeSnippetElementParameters.DESTINATION_FILE_NAME));
Env.setContext(packout.getCtx(), CodeSnippetElementParameters.AD_Package_Code_Old, (String)detail.getProperty(CodeSnippetElementParameters.AD_Package_Code_Old)); Env.setContext(packout.getCtx().ctx, CodeSnippetElementParameters.AD_Package_Code_Old, (String)detail.getProperty(CodeSnippetElementParameters.AD_Package_Code_Old));
Env.setContext(packout.getCtx(), CodeSnippetElementParameters.AD_Package_Code_New, (String)detail.getProperty(CodeSnippetElementParameters.AD_Package_Code_New)); Env.setContext(packout.getCtx().ctx, CodeSnippetElementParameters.AD_Package_Code_New, (String)detail.getProperty(CodeSnippetElementParameters.AD_Package_Code_New));
Env.setContext(packout.getCtx(), CodeSnippetElementParameters.RELEASE_NO, (String)detail.getProperty(CodeSnippetElementParameters.RELEASE_NO)); Env.setContext(packout.getCtx().ctx, CodeSnippetElementParameters.RELEASE_NO, (String)detail.getProperty(CodeSnippetElementParameters.RELEASE_NO));
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(CodeSnippetElementParameters.DESTINATION_DIRECTORY); packout.getCtx().ctx.remove(CodeSnippetElementParameters.DESTINATION_DIRECTORY);
packout.getCtx().remove(CodeSnippetElementParameters.DESTINATION_FILE_NAME); packout.getCtx().ctx.remove(CodeSnippetElementParameters.DESTINATION_FILE_NAME);
packout.getCtx().remove(CodeSnippetElementParameters.AD_Package_Code_Old); packout.getCtx().ctx.remove(CodeSnippetElementParameters.AD_Package_Code_Old);
packout.getCtx().remove(CodeSnippetElementParameters.AD_Package_Code_New); packout.getCtx().ctx.remove(CodeSnippetElementParameters.AD_Package_Code_New);
packout.getCtx().remove(CodeSnippetElementParameters.RELEASE_NO); packout.getCtx().ctx.remove(CodeSnippetElementParameters.RELEASE_NO);
} }
} }

View File

@ -21,12 +21,12 @@ import java.sql.DatabaseMetaData;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.List; import java.util.List;
import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -49,11 +49,11 @@ import org.xml.sax.helpers.AttributesImpl;
public class ColumnElementHandler extends AbstractElementHandler { public class ColumnElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
int success = 0; int success = 0;
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
if (isParentDefer(element, I_AD_Table.Table_Name)) { if (isParentDefer(element, I_AD_Table.Table_Name)) {
element.defer = true; element.defer = true;
return; return;
@ -68,13 +68,13 @@ public class ColumnElementHandler extends AbstractElementHandler {
if (getParentId(element, I_AD_Table.Table_Name) > 0) { if (getParentId(element, I_AD_Table.Table_Name) > 0) {
tableid = getParentId(element, I_AD_Table.Table_Name); tableid = getParentId(element, I_AD_Table.Table_Name);
} else { } else {
mColumn = new MColumn(ctx, 0, getTrxName(ctx)); mColumn = new MColumn(ctx.ctx, 0, getTrxName(ctx));
PoFiller filler = new PoFiller(ctx, mColumn, element, this); PoFiller filler = new PoFiller(ctx, mColumn, element, this);
filler.setTableReference("AD_Table_ID"); filler.setTableReference("AD_Table_ID");
tableid = mColumn.getAD_Table_ID(); tableid = mColumn.getAD_Table_ID();
} }
int AD_Column_ID = findIdByColumnAndParentId(ctx, "AD_Column", "ColumnName", columnName, "AD_Table", tableid); int AD_Column_ID = findIdByColumnAndParentId(ctx, "AD_Column", "ColumnName", columnName, "AD_Table", tableid, /*ignorecase=*/true);
mColumn = new MColumn(ctx, AD_Column_ID > 0 ? AD_Column_ID : 0, getTrxName(ctx)); mColumn = new MColumn(ctx.ctx, AD_Column_ID > 0 ? AD_Column_ID : 0, getTrxName(ctx));
if (mColumn.getAD_Column_ID() == 0 && isOfficialId(element, "AD_Column_ID")) { if (mColumn.getAD_Column_ID() == 0 && isOfficialId(element, "AD_Column_ID")) {
mColumn.setAD_Column_ID(getIntValue(element, "AD_Column_ID")); mColumn.setAD_Column_ID(getIntValue(element, "AD_Column_ID"));
} }
@ -87,6 +87,7 @@ public class ColumnElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -104,7 +105,7 @@ public class ColumnElementHandler extends AbstractElementHandler {
// Setup Element. // Setup Element.
if (mColumn.getAD_Element_ID() == 0) { if (mColumn.getAD_Element_ID() == 0) {
X_AD_Element adElement = new X_AD_Element(ctx, 0, getTrxName(ctx)); X_AD_Element adElement = new X_AD_Element(ctx.ctx, 0, getTrxName(ctx));
adElement.setColumnName(mColumn.getColumnName()); adElement.setColumnName(mColumn.getColumnName());
adElement.setEntityType(mColumn.getEntityType()); adElement.setEntityType(mColumn.getEntityType());
adElement.setPrintName(mColumn.getColumnName()); adElement.setPrintName(mColumn.getColumnName());
@ -164,11 +165,11 @@ public class ColumnElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, mColumn.getName(), mColumn logImportDetail(ctx, impDetail, 0, mColumn.getName(), mColumn
.get_ID(), action); .get_ID(), action);
throw new POSaveFailedException("Failed to import column."); throw new POSaveFailedException("Failed to save column " + mColumn.getName());
} }
if (recreateColumn || syncDatabase) { if (recreateColumn || syncDatabase) {
MTable table = new MTable(ctx, mColumn.getAD_Table_ID(), getTrxName(ctx)); MTable table = new MTable(ctx.ctx, mColumn.getAD_Table_ID(), getTrxName(ctx));
if (!table.isView() && !mColumn.isVirtualColumn()) { if (!table.isView() && !mColumn.isVirtualColumn()) {
success = createColumn(ctx, table, mColumn, recreateColumn); success = createColumn(ctx, table, mColumn, recreateColumn);
@ -199,7 +200,7 @@ public class ColumnElementHandler extends AbstractElementHandler {
* @param v_IsMandatory * @param v_IsMandatory
* *
*/ */
private int createColumn(Properties ctx, MTable table, MColumn column, boolean doAlter) { private int createColumn(PIPOContext ctx, MTable table, MColumn column, boolean doAlter) {
int no = 0; int no = 0;
@ -297,23 +298,30 @@ public class ColumnElementHandler extends AbstractElementHandler {
return 1; return 1;
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Column_ID = Env.getContextAsInt(ctx, int AD_Column_ID = Env.getContextAsInt(ctx.ctx,
X_AD_Column.COLUMNNAME_AD_Column_ID); X_AD_Column.COLUMNNAME_AD_Column_ID);
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
X_AD_Column m_Column = new X_AD_Column(ctx, AD_Column_ID, X_AD_Column m_Column = new X_AD_Column(ctx.ctx, AD_Column_ID,
getTrxName(ctx)); getTrxName(ctx));
if (ctx.packOut.getFromDate() != null) {
if (m_Column.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_Column.Table_Name, atts); document.startElement("", "", I_AD_Column.Table_Name, atts);
createColumnBinding(ctx, document, m_Column); createColumnBinding(ctx, document, m_Column);
document.endElement("", "", I_AD_Column.Table_Name); document.endElement("", "", I_AD_Column.Table_Name);
} }
private void createColumnBinding(Properties ctx, TransformerHandler document, private void createColumnBinding(PIPOContext ctx, TransformerHandler document,
X_AD_Column m_Column) { X_AD_Column m_Column) {
PoExporter filler = new PoExporter(ctx, document, m_Column); PoExporter filler = new PoExporter(ctx, document, m_Column);
@ -337,8 +345,8 @@ public class ColumnElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
Env.setContext(packout.getCtx(), I_AD_Column.COLUMNNAME_AD_Column_ID, recordId); Env.setContext(packout.getCtx().ctx, I_AD_Column.COLUMNNAME_AD_Column_ID, recordId);
create(packout.getCtx(), packoutHandler); create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(I_AD_Column.COLUMNNAME_AD_Column_ID); packout.getCtx().ctx.remove(I_AD_Column.COLUMNNAME_AD_Column_ID);
} }
} }

View File

@ -5,12 +5,12 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.exceptions.DBException; import org.adempiere.exceptions.DBException;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.ElementHandler; import org.adempiere.pipo2.ElementHandler;
@ -30,9 +30,9 @@ public class CommonTranslationHandler extends AbstractElementHandler implements
private HashMap<String, ArrayList<String>> cacheColumns = new HashMap<String, ArrayList<String>>();//Key: table name. Value: set of PIPO columns private HashMap<String, ArrayList<String>> cacheColumns = new HashMap<String, ArrayList<String>>();//Key: table name. Value: set of PIPO columns
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
if(! isHandleTranslations(ctx)){ if(! isHandleTranslations(ctx.ctx)){
return;//translation import option is disabled return;//translation import option is disabled
} }
@ -64,7 +64,7 @@ public class CommonTranslationHandler extends AbstractElementHandler implements
private boolean isRecordExists(String tableName, int parentID, private boolean isRecordExists(String tableName, int parentID,
String language, Properties ctx) { String language, PIPOContext ctx) {
String sql = String sql =
"SELECT AD_Client_ID FROM " + tableName +" WHERE " + "SELECT AD_Client_ID FROM " + tableName +" WHERE " +
@ -79,7 +79,7 @@ public class CommonTranslationHandler extends AbstractElementHandler implements
private void insertTranslation(String tableName, int parentID, private void insertTranslation(String tableName, int parentID,
Properties ctx, Element element) throws SAXException{ PIPOContext ctx, Element element) throws SAXException{
String parentTable = tableName.substring(0, tableName.length()-4); String parentTable = tableName.substring(0, tableName.length()-4);
ArrayList<String> columns = getTranslatedColumns(parentTable); ArrayList<String> columns = getTranslatedColumns(parentTable);
@ -133,7 +133,7 @@ public class CommonTranslationHandler extends AbstractElementHandler implements
private void updateTranslation(String tableName, int parentID, private void updateTranslation(String tableName, int parentID,
Properties ctx, Element element) throws SAXException{ PIPOContext ctx, Element element) throws SAXException{
String parentTable = tableName.substring(0, tableName.length()-4); String parentTable = tableName.substring(0, tableName.length()-4);
ArrayList<String> columns = getTranslatedColumns(parentTable); ArrayList<String> columns = getTranslatedColumns(parentTable);
StringBuffer buffer = new StringBuffer("UPDATE "+tableName+" SET "); StringBuffer buffer = new StringBuffer("UPDATE "+tableName+" SET ");
@ -173,22 +173,22 @@ public class CommonTranslationHandler extends AbstractElementHandler implements
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) throws SAXException { public void create(PIPOContext ctx, TransformerHandler document) throws SAXException {
String parenTableName = Env.getContext(ctx, CONTEXT_KEY_PARENT_TABLE); String parenTableName = Env.getContext(ctx.ctx, CONTEXT_KEY_PARENT_TABLE);
int parentRecordID = Env.getContextAsInt(ctx, CONTEXT_KEY_PARENT_RECORD_ID); int parentRecordID = Env.getContextAsInt(ctx.ctx, CONTEXT_KEY_PARENT_RECORD_ID);
createTranslationTags(ctx, parenTableName, parentRecordID, document); createTranslationTags(ctx, parenTableName, parentRecordID, document);
} }
private void createTranslationTags(Properties ctx, String parentTable, private void createTranslationTags(PIPOContext ctx, String parentTable,
int parentRecordID, TransformerHandler document) throws SAXException { int parentRecordID, TransformerHandler document) throws SAXException {
ArrayList<String> translatedColumns = getTranslatedColumns(parentTable); ArrayList<String> translatedColumns = getTranslatedColumns(parentTable);
@ -221,7 +221,7 @@ public class CommonTranslationHandler extends AbstractElementHandler implements
} }
} }
private void exportRow(Properties ctx, TransformerHandler document, ArrayList<String> columns, private void exportRow(PIPOContext ctx, TransformerHandler document, ArrayList<String> columns,
ResultSet rs) throws Exception { ResultSet rs) throws Exception {
PoExporter af = new PoExporter(ctx, document, null); PoExporter af = new PoExporter(ctx, document, null);
@ -289,12 +289,12 @@ public class CommonTranslationHandler extends AbstractElementHandler implements
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
if("true".equals(packout.getCtx().getProperty("isHandleTranslations"))){ if("true".equals(packout.getCtx().ctx.getProperty("isHandleTranslations"))){
Env.setContext(packout.getCtx(), CommonTranslationHandler.CONTEXT_KEY_PARENT_TABLE,X_AD_Element.Table_Name); Env.setContext(packout.getCtx().ctx, CommonTranslationHandler.CONTEXT_KEY_PARENT_TABLE,X_AD_Element.Table_Name);
Env.setContext(packout.getCtx(), CommonTranslationHandler.CONTEXT_KEY_PARENT_RECORD_ID,recordId); Env.setContext(packout.getCtx().ctx, CommonTranslationHandler.CONTEXT_KEY_PARENT_RECORD_ID,recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(CommonTranslationHandler.CONTEXT_KEY_PARENT_TABLE); packout.getCtx().ctx.remove(CommonTranslationHandler.CONTEXT_KEY_PARENT_TABLE);
packout.getCtx().remove(CommonTranslationHandler.CONTEXT_KEY_PARENT_RECORD_ID); packout.getCtx().ctx.remove(CommonTranslationHandler.CONTEXT_KEY_PARENT_RECORD_ID);
} }
} }

View File

@ -22,12 +22,12 @@ import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
import org.adempiere.pipo2.PackoutItem; import org.adempiere.pipo2.PackoutItem;
import org.compiere.Adempiere; import org.compiere.Adempiere;
@ -53,7 +53,7 @@ public class DistFileElementHandler extends AbstractElementHandler {
this.fileDest=fileDest; this.fileDest=fileDest;
} }
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
String action = null; String action = null;
String releaseNumber = getStringValue(element,"ReleaseNo"); String releaseNumber = getStringValue(element,"ReleaseNo");
@ -72,7 +72,7 @@ public class DistFileElementHandler extends AbstractElementHandler {
//get adempiere-all directory //get adempiere-all directory
try { try {
packagePath = getPackageDirectory(ctx); packagePath = getPackageDirectory(ctx.ctx);
File parentDirectory = new File(packagePath); File parentDirectory = new File(packagePath);
while (!parentDirectory.getName().equals("packages")){ while (!parentDirectory.getName().equals("packages")){
parentDirectory = parentDirectory.getParentFile(); parentDirectory = parentDirectory.getParentFile();
@ -165,25 +165,25 @@ public class DistFileElementHandler extends AbstractElementHandler {
} }
} }
//Record in transaction file //Record in transaction file
X_AD_Package_Imp_Backup backup = new X_AD_Package_Imp_Backup(ctx, 0, getTrxName(ctx)); X_AD_Package_Imp_Backup backup = new X_AD_Package_Imp_Backup(ctx.ctx, 0, getTrxName(ctx));
backup.setAD_Org_ID(Env.getAD_Org_ID(ctx)); backup.setAD_Org_ID(Env.getAD_Org_ID(ctx.ctx));
backup.setAD_Package_Imp_Org_Dir(fullTargetPath+fileName); backup.setAD_Package_Imp_Org_Dir(fullTargetPath+fileName);
backup.setAD_Package_Imp_Bck_Dir(packagePath+File.separator+"backup"+File.separator+fileDate+"_"+fileName); backup.setAD_Package_Imp_Bck_Dir(packagePath+File.separator+"backup"+File.separator+fileDate+"_"+fileName);
backup.setAD_Package_Imp_ID(getPackageImpId(ctx)); backup.setAD_Package_Imp_ID(getPackageImpId(ctx.ctx));
backup.saveEx(); backup.saveEx();
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
String FileName = Env.getContext(ctx, X_AD_Package_Exp_Detail.COLUMNNAME_FileName); String FileName = Env.getContext(ctx.ctx, X_AD_Package_Exp_Detail.COLUMNNAME_FileName);
String Source_Directory = Env.getContext(ctx, "Source_Directory"); String Source_Directory = Env.getContext(ctx.ctx, "Source_Directory");
String Target_Directory = Env.getContext(ctx, X_AD_Package_Exp_Detail.COLUMNNAME_Target_Directory); String Target_Directory = Env.getContext(ctx.ctx, X_AD_Package_Exp_Detail.COLUMNNAME_Target_Directory);
String ReleaseNo = Env.getContext(ctx, X_AD_Package_Exp_Detail.COLUMNNAME_ReleaseNo); String ReleaseNo = Env.getContext(ctx.ctx, X_AD_Package_Exp_Detail.COLUMNNAME_ReleaseNo);
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "custom"); addTypeName(atts, "custom");
document.startElement("","","Dist_File",atts); document.startElement("","","Dist_File",atts);
@ -197,22 +197,20 @@ public class DistFileElementHandler extends AbstractElementHandler {
public void doPackout(PackOut packout, MPackageExp header, PackoutItem detail,TransformerHandler packOutDocument,TransformerHandler packageDocument,AttributesImpl atts,int recordId) throws Exception public void doPackout(PackOut packout, MPackageExp header, PackoutItem detail,TransformerHandler packOutDocument,TransformerHandler packageDocument,AttributesImpl atts,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_FileName, (String)detail.getProperty("FileName")); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_FileName, (String)detail.getProperty("FileName"));
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_ReleaseNo, (String)detail.getProperty("ReleaseNo")); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_ReleaseNo, (String)detail.getProperty("ReleaseNo"));
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_Target_Directory, (String)detail.getProperty("TargetDirectory")); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_Target_Directory, (String)detail.getProperty("TargetDirectory"));
Env.setContext(packout.getCtx(), "Source_Directory", fileDest); Env.setContext(packout.getCtx().ctx, "Source_Directory", fileDest);
this.create(packout.getCtx(), packOutDocument); this.create(packout.getCtx(), packOutDocument);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_FileName); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_FileName);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_ReleaseNo); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_ReleaseNo);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_Target_Directory); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_Target_Directory);
packout.getCtx().remove("Source_Directory"); packout.getCtx().ctx.remove("Source_Directory");
} }
@Override @Override
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
// TODO Auto-generated method stub
} }
} }

View File

@ -18,11 +18,11 @@ package org.adempiere.pipo2.handler;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -40,16 +40,16 @@ public class DynValRuleElementHandler extends AbstractElementHandler {
private List<Integer> rules = new ArrayList<Integer>(); private List<Integer> rules = new ArrayList<Integer>();
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
String name = getStringValue(element, "Name"); String name = getStringValue(element, "Name");
X_AD_Val_Rule mValRule = findPO(ctx, element); X_AD_Val_Rule mValRule = findPO(ctx, element);
if (mValRule == null) if (mValRule == null)
{ {
int id = findIdByColumn(ctx, "AD_Val_Rule", "Name", name); int id = findIdByColumn(ctx, "AD_Val_Rule", "Name", name);
mValRule = new X_AD_Val_Rule(ctx, id > 0 ? id : 0, getTrxName(ctx)); mValRule = new X_AD_Val_Rule(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }
if (mValRule.getAD_Val_Rule_ID() == 0 && isOfficialId(element, "AD_Val_Rule_ID")) if (mValRule.getAD_Val_Rule_ID() == 0 && isOfficialId(element, "AD_Val_Rule_ID"))
mValRule.setAD_Val_Rule_ID(getIntValue(element, "AD_Val_Rule_ID")); mValRule.setAD_Val_Rule_ID(getIntValue(element, "AD_Val_Rule_ID"));
@ -60,6 +60,7 @@ public class DynValRuleElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -80,7 +81,7 @@ public class DynValRuleElementHandler extends AbstractElementHandler {
} }
else{ else{
logImportDetail (ctx, impDetail, 0, mValRule.getName(), mValRule.get_ID(),action); logImportDetail (ctx, impDetail, 0, mValRule.getName(), mValRule.get_ID(),action);
throw new POSaveFailedException("Failed to save dynamic validation rule."); throw new POSaveFailedException("Failed to save dynamic validation rule " + mValRule.getName());
} }
} }
} else { } else {
@ -89,16 +90,23 @@ public class DynValRuleElementHandler extends AbstractElementHandler {
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
protected void create(Properties ctx, TransformerHandler document) protected void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Val_Rule_ID = Env.getContextAsInt(ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Val_Rule_ID); int AD_Val_Rule_ID = Env.getContextAsInt(ctx.ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Val_Rule_ID);
if (rules.contains(AD_Val_Rule_ID)) if (rules.contains(AD_Val_Rule_ID))
return; return;
rules.add(AD_Val_Rule_ID); rules.add(AD_Val_Rule_ID);
X_AD_Val_Rule m_ValRule = new X_AD_Val_Rule (ctx, AD_Val_Rule_ID, null); X_AD_Val_Rule m_ValRule = new X_AD_Val_Rule (ctx.ctx, AD_Val_Rule_ID, null);
if (ctx.packOut.getFromDate() != null) {
if (m_ValRule.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("","",I_AD_Val_Rule.Table_Name, atts); document.startElement("","",I_AD_Val_Rule.Table_Name, atts);
@ -107,7 +115,7 @@ public class DynValRuleElementHandler extends AbstractElementHandler {
} }
private void createDynamicValidationRuleBinding(Properties ctx, TransformerHandler document, X_AD_Val_Rule m_ValRule) private void createDynamicValidationRuleBinding(PIPOContext ctx, TransformerHandler document, X_AD_Val_Rule m_ValRule)
{ {
PoExporter filler = new PoExporter(ctx, document, m_ValRule); PoExporter filler = new PoExporter(ctx, document, m_ValRule);
List<String>excludes = defaultExcludeList(X_AD_Val_Rule.Table_Name); List<String>excludes = defaultExcludeList(X_AD_Val_Rule.Table_Name);
@ -122,9 +130,9 @@ public class DynValRuleElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_Val_Rule_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Val_Rule_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Val_Rule_ID); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Val_Rule_ID);
} }
} }

View File

@ -17,12 +17,12 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.ElementHandler; import org.adempiere.pipo2.ElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -33,7 +33,6 @@ import org.compiere.model.I_AD_Field;
import org.compiere.model.I_AD_FieldGroup; import org.compiere.model.I_AD_FieldGroup;
import org.compiere.model.I_AD_Reference; import org.compiere.model.I_AD_Reference;
import org.compiere.model.I_AD_Tab; import org.compiere.model.I_AD_Tab;
import org.compiere.model.I_AD_Val_Rule;
import org.compiere.model.MField; import org.compiere.model.MField;
import org.compiere.model.X_AD_Field; import org.compiere.model.X_AD_Field;
import org.compiere.model.X_AD_Package_Imp_Detail; import org.compiere.model.X_AD_Package_Imp_Detail;
@ -44,32 +43,47 @@ import org.xml.sax.helpers.AttributesImpl;
public class FieldElementHandler extends AbstractElementHandler { public class FieldElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
if (isParentDefer(element, I_AD_Tab.Table_Name)) { if (isParentDefer(element, I_AD_Tab.Table_Name)) {
element.defer = true; element.defer = true;
return; return;
} }
List<String>excludes = defaultExcludeList(X_AD_Field.Table_Name); List<String>excludes = defaultExcludeList(X_AD_Field.Table_Name);
excludes.add("AD_Window_ID");
excludes.add("AD_Tab_ID");
int tabid = getParentId(element, I_AD_Tab.Table_Name) ; int tabid = getParentId(element, I_AD_Tab.Table_Name) ;
if (tabid <= 0) {
Element tabElement = element.properties.get("AD_Tab_ID");
if (ReferenceUtils.isIDLookup(tabElement) || ReferenceUtils.isUUIDLookup(tabElement)) {
tabid = ReferenceUtils.resolveReference(ctx.ctx, tabElement, getTrxName(ctx));
} else {
String tabName = getStringValue(element, "AD_Tab_ID");
int AD_Window_ID = ReferenceUtils.resolveReference(ctx.ctx, element.properties.get("AD_Window_ID"), getTrxName(ctx));
if (AD_Window_ID > 0) {
tabid = findIdByNameAndParentId(ctx, "AD_Tab", tabName, "AD_Window", AD_Window_ID);
}
}
}
if (tabid <= 0) { if (tabid <= 0) {
element.defer = true; element.defer = true;
element.unresolved = "AD_Tab_ID";
return; return;
} }
MField mField = findPO(ctx, element); excludes.add("AD_Table_ID");
if (mField == null) excludes.add("AD_Column_ID");
{
int AD_Table_ID = ReferenceUtils.resolveReference(ctx, element.parent.properties.get("AD_Table_ID"), getTrxName(ctx)); int AD_Table_ID = ReferenceUtils.resolveReference(ctx.ctx, element.properties.get("AD_Table_ID"), getTrxName(ctx));
Element columnElement = element.properties.get("AD_Column_ID"); Element columnElement = element.properties.get("AD_Column_ID");
int AD_Column_ID = 0; int AD_Column_ID = 0;
if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement)) if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement))
{ {
AD_Column_ID = ReferenceUtils.resolveReference(ctx, columnElement, getTrxName(ctx)); AD_Column_ID = ReferenceUtils.resolveReference(ctx.ctx, columnElement, getTrxName(ctx));
} }
else else
{ {
@ -79,20 +93,32 @@ public class FieldElementHandler extends AbstractElementHandler {
if (AD_Column_ID == 0) { if (AD_Column_ID == 0) {
element.defer = true; element.defer = true;
element.unresolved = "AD_Column_ID";
return; return;
} }
MField mField = findPO(ctx, element);
if (mField == null)
{
StringBuffer sqlB = new StringBuffer( StringBuffer sqlB = new StringBuffer(
"select AD_Field_ID from AD_Field where AD_Column_ID = ") "select AD_Field_ID from AD_Field where AD_Column_ID = ")
.append(AD_Column_ID) .append(AD_Column_ID)
.append(" and AD_Tab_ID = ?"); .append(" and AD_Tab_ID = ?");
int id = DB.getSQLValue(getTrxName(ctx), sqlB.toString(), tabid); int id = DB.getSQLValue(getTrxName(ctx), sqlB.toString(), tabid);
mField = new MField(ctx, id > 0 ? id : 0, getTrxName(ctx)); mField = new MField(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
if (mField.is_new()) { if (mField.is_new()) {
mField.setAD_Column_ID(AD_Column_ID); mField.setAD_Column_ID(AD_Column_ID);
mField.setAD_Tab_ID(tabid); mField.setAD_Tab_ID(tabid);
} }
} else {
if (mField.getAD_Tab_ID() != tabid) {
mField.setAD_Tab_ID(tabid);
} }
if (mField.getAD_Column_ID() != AD_Column_ID) {
mField.setAD_Column_ID(AD_Column_ID);
}
}
PoFiller filler = new PoFiller(ctx, mField, element, this); PoFiller filler = new PoFiller(ctx, mField, element, this);
if (mField.getAD_Field_ID() == 0 && isOfficialId(element, "AD_Field_ID")) if (mField.getAD_Field_ID() == 0 && isOfficialId(element, "AD_Field_ID"))
{ {
@ -102,6 +128,7 @@ public class FieldElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -124,7 +151,7 @@ public class FieldElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, mField.getName(), mField logImportDetail(ctx, impDetail, 0, mField.getName(), mField
.get_ID(), action); .get_ID(), action);
throw new POSaveFailedException("Failed to save field definition."); throw new POSaveFailedException("Failed to save field definition " + mField.getName());
} }
} }
} else { } else {
@ -132,20 +159,16 @@ public class FieldElementHandler extends AbstractElementHandler {
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Field_ID = Env.getContextAsInt(ctx, int AD_Field_ID = Env.getContextAsInt(ctx.ctx,
X_AD_Field.COLUMNNAME_AD_Field_ID); X_AD_Field.COLUMNNAME_AD_Field_ID);
X_AD_Field m_Field = new X_AD_Field(ctx, AD_Field_ID, null); X_AD_Field m_Field = new X_AD_Field(ctx.ctx, AD_Field_ID, null);
AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table");
document.startElement("", "", I_AD_Field.Table_Name, atts);
createFieldBinding(ctx, document, m_Field);
PackOut packOut = (PackOut)ctx.get("PackOutProcess"); PackOut packOut = ctx.packOut;
try try
{ {
@ -160,28 +183,26 @@ public class FieldElementHandler extends AbstractElementHandler {
ElementHandler handler = packOut.getHandler(I_AD_Reference.Table_Name); ElementHandler handler = packOut.getHandler(I_AD_Reference.Table_Name);
handler.packOut(packOut,document,null,m_Field.getAD_Reference_ID()); handler.packOut(packOut,document,null,m_Field.getAD_Reference_ID());
} }
if (m_Field.getAD_Reference_Value_ID()>0)
{
ElementHandler handler = packOut.getHandler(I_AD_Reference.Table_Name);
handler.packOut(packOut,document,null,m_Field.getAD_Reference_Value_ID());
}
if (m_Field.getAD_Val_Rule_ID()>0)
{
ElementHandler handler = packOut.getHandler(I_AD_Val_Rule.Table_Name);
handler.packOut(packOut,document,null,m_Field.getAD_Val_Rule_ID());
}
} }
catch(Exception e) catch(Exception e)
{ {
log.info(e.toString()); throw new SAXException(e);
} }
document.endElement("", "", I_AD_Field.Table_Name); if (ctx.packOut.getFromDate() != null) {
if (m_Field.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
} }
private void createFieldBinding(Properties ctx, TransformerHandler document, AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table");
document.startElement("", "", X_AD_Field.Table_Name, atts);
createFieldBinding(ctx, document, m_Field);
document.endElement("", "", X_AD_Field.Table_Name);
}
private void createFieldBinding(PIPOContext ctx, TransformerHandler document,
X_AD_Field m_Field) { X_AD_Field m_Field) {
List<String> excludes = defaultExcludeList(X_AD_Field.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Field.Table_Name);
@ -190,6 +211,20 @@ public class FieldElementHandler extends AbstractElementHandler {
filler.add("AD_Field_ID", new AttributesImpl()); filler.add("AD_Field_ID", new AttributesImpl());
} }
int AD_Table_ID = DB.getSQLValue(getTrxName(ctx), "SELECT AD_Table_ID FROM AD_Column WHERE AD_Column_ID=?", m_Field.getAD_Column_ID());
if (AD_Table_ID > 0) {
AttributesImpl atts = new AttributesImpl();
filler.addTableReference("AD_Table_ID", "AD_Table", "TableName", AD_Table_ID, atts);
}
excludes.add("AD_Tab_ID");
AttributesImpl atts = new AttributesImpl();
filler.addTableReference("AD_Tab_ID", "AD_Tab", "Name", m_Field.getAD_Tab_ID(), atts);
if (atts.getValue("reference").equals("table")) {
int AD_Window_ID = DB.getSQLValue(getTrxName(ctx), "SELECT AD_Window_ID FROM AD_Tab WHERE AD_Tab_ID=?", m_Field.getAD_Tab_ID());
filler.addTableReference("AD_Window_ID", "AD_Window", "Name", AD_Window_ID, new AttributesImpl());
}
filler.export(excludes); filler.export(excludes);
} }
@ -197,8 +232,8 @@ public class FieldElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
Env.setContext(packout.getCtx(), I_AD_Field.COLUMNNAME_AD_Field_ID, recordId); Env.setContext(packout.getCtx().ctx, I_AD_Field.COLUMNNAME_AD_Field_ID, recordId);
create(packout.getCtx(), packoutHandler); create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(I_AD_Field.COLUMNNAME_AD_Field_ID); packout.getCtx().ctx.remove(I_AD_Field.COLUMNNAME_AD_Field_ID);
} }
} }

View File

@ -19,11 +19,11 @@ package org.adempiere.pipo2.handler;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -42,7 +42,7 @@ public class FieldGroupElementHandler extends AbstractElementHandler {
private List<Integer> processedFieldGroups = new ArrayList<Integer>(); private List<Integer> processedFieldGroups = new ArrayList<Integer>();
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
String elementValue = element.getElementValue(); String elementValue = element.getElementValue();
String action = null; String action = null;
@ -52,13 +52,13 @@ public class FieldGroupElementHandler extends AbstractElementHandler {
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
String name = getStringValue(element, "Name"); String name = getStringValue(element, "Name");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
X_AD_FieldGroup fieldGroup = findPO(ctx, element); X_AD_FieldGroup fieldGroup = findPO(ctx, element);
if (fieldGroup == null) if (fieldGroup == null)
{ {
int id = findIdByColumn(ctx, X_AD_FieldGroup.Table_Name, X_AD_FieldGroup.COLUMNNAME_Name, name); int id = findIdByColumn(ctx, X_AD_FieldGroup.Table_Name, X_AD_FieldGroup.COLUMNNAME_Name, name);
fieldGroup = new X_AD_FieldGroup(ctx, id > 0 ? id : 0, getTrxName(ctx)); fieldGroup = new X_AD_FieldGroup(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }
PoFiller pf = new PoFiller(ctx, fieldGroup, element, this); PoFiller pf = new PoFiller(ctx, fieldGroup, element, this);
List<String> excludes = defaultExcludeList(X_AD_FieldGroup.Table_Name); List<String> excludes = defaultExcludeList(X_AD_FieldGroup.Table_Name);
@ -75,6 +75,7 @@ public class FieldGroupElementHandler extends AbstractElementHandler {
List<String> notfounds = pf.autoFill(excludes); List<String> notfounds = pf.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -99,7 +100,7 @@ public class FieldGroupElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, fieldGroup.getName(), logImportDetail(ctx, impDetail, 0, fieldGroup.getName(),
fieldGroup.get_ID(), action); fieldGroup.get_ID(), action);
throw new POSaveFailedException("Reference"); throw new POSaveFailedException("Failed to save Field Group " + fieldGroup.getName());
} }
} }
} else { } else {
@ -107,14 +108,14 @@ public class FieldGroupElementHandler extends AbstractElementHandler {
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
protected void create(Properties ctx, TransformerHandler document) protected void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int fieldGroup_id = Env.getContextAsInt(ctx, int fieldGroup_id = Env.getContextAsInt(ctx.ctx,
X_AD_FieldGroup.COLUMNNAME_AD_FieldGroup_ID); X_AD_FieldGroup.COLUMNNAME_AD_FieldGroup_ID);
if (processedFieldGroups.contains(fieldGroup_id)) if (processedFieldGroups.contains(fieldGroup_id))
@ -122,7 +123,13 @@ public class FieldGroupElementHandler extends AbstractElementHandler {
processedFieldGroups.add(fieldGroup_id); processedFieldGroups.add(fieldGroup_id);
X_AD_FieldGroup fieldGroup = new X_AD_FieldGroup(ctx, fieldGroup_id, null); X_AD_FieldGroup fieldGroup = new X_AD_FieldGroup(ctx.ctx, fieldGroup_id, null);
if (ctx.packOut.getFromDate() != null) {
if (fieldGroup.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
@ -130,7 +137,7 @@ public class FieldGroupElementHandler extends AbstractElementHandler {
createAdElementBinding(ctx, document, fieldGroup); createAdElementBinding(ctx, document, fieldGroup);
PackOut packOut = (PackOut)ctx.get("PackOutProcess"); PackOut packOut = ctx.packOut;
try{ try{
new CommonTranslationHandler().packOut(packOut,document,null,fieldGroup.get_ID()); new CommonTranslationHandler().packOut(packOut,document,null,fieldGroup.get_ID());
@ -143,7 +150,7 @@ public class FieldGroupElementHandler extends AbstractElementHandler {
} }
private void createAdElementBinding(Properties ctx, TransformerHandler document, private void createAdElementBinding(PIPOContext ctx, TransformerHandler document,
X_AD_FieldGroup fieldGroup) { X_AD_FieldGroup fieldGroup) {
PoExporter filler = new PoExporter(ctx, document, fieldGroup); PoExporter filler = new PoExporter(ctx, document, fieldGroup);
@ -157,9 +164,9 @@ public class FieldGroupElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_FieldGroup.COLUMNNAME_AD_FieldGroup_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_FieldGroup.COLUMNNAME_AD_FieldGroup_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_FieldGroup.COLUMNNAME_AD_FieldGroup_ID); packout.getCtx().ctx.remove(X_AD_FieldGroup.COLUMNNAME_AD_FieldGroup_ID);
} }
} }

View File

@ -1,7 +1,6 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.io.File; import java.io.File;
import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
@ -10,6 +9,7 @@ import org.adempiere.exceptions.AdempiereException;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.ElementHandler; import org.adempiere.pipo2.ElementHandler;
import org.adempiere.pipo2.FileElementParameters; import org.adempiere.pipo2.FileElementParameters;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
import org.adempiere.pipo2.PackoutDocument; import org.adempiere.pipo2.PackoutDocument;
import org.adempiere.pipo2.PackoutItem; import org.adempiere.pipo2.PackoutItem;
@ -88,11 +88,11 @@ public class FileElementHandler implements ElementHandler {
} }
@Override @Override
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
} }
@Override @Override
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
} }

View File

@ -17,11 +17,11 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
@ -40,7 +40,7 @@ import org.xml.sax.helpers.AttributesImpl;
public class FormAccessElementHandler extends AbstractElementHandler { public class FormAccessElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_Form_Access.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Form_Access.Table_Name);
MFormAccess po = findPO(ctx, element); MFormAccess po = findPO(ctx, element);
@ -49,28 +49,30 @@ public class FormAccessElementHandler extends AbstractElementHandler {
if (getParentId(element, I_AD_Role.Table_Name) > 0) { if (getParentId(element, I_AD_Role.Table_Name) > 0) {
AD_Role_ID = getParentId(element, I_AD_Role.Table_Name); AD_Role_ID = getParentId(element, I_AD_Role.Table_Name);
} else { } else {
AD_Role_ID = ReferenceUtils.resolveReference(ctx, element.properties.get("AD_Role_ID"), getTrxName(ctx)); AD_Role_ID = ReferenceUtils.resolveReference(ctx.ctx, element.properties.get("AD_Role_ID"), getTrxName(ctx));
} }
if (AD_Role_ID <= 0) if (AD_Role_ID <= 0)
{ {
element.defer = true; element.defer = true;
element.unresolved = "AD_Role_ID";
return; return;
} }
int AD_Form_ID = ReferenceUtils.resolveReference(ctx, element.properties.get("AD_Form_ID"), getTrxName(ctx)); int AD_Form_ID = ReferenceUtils.resolveReference(ctx.ctx, element.properties.get("AD_Form_ID"), getTrxName(ctx));
if (AD_Form_ID <= 0) if (AD_Form_ID <= 0)
{ {
element.defer = true; element.defer = true;
element.unresolved = "AD_Form_ID";
return; return;
} }
Query query = new Query(ctx, "AD_Form_Access", "AD_Form_ID = ? AND AD_Role_ID = ?", getTrxName(ctx)); Query query = new Query(ctx.ctx, "AD_Form_Access", "AD_Form_ID = ? AND AD_Role_ID = ?", getTrxName(ctx));
po = query.setParameters(new Object[]{AD_Form_ID, AD_Role_ID}) po = query.setParameters(new Object[]{AD_Form_ID, AD_Role_ID})
.setClient_ID() .setClient_ID()
.<MFormAccess>first(); .<MFormAccess>first();
if (po == null) if (po == null)
{ {
po = new MFormAccess(ctx, 0, null); po = new MFormAccess(ctx.ctx, 0, getTrxName(ctx));
po.setAD_Form_ID(AD_Form_ID); po.setAD_Form_ID(AD_Form_ID);
po.setAD_Role_ID(AD_Role_ID); po.setAD_Role_ID(AD_Role_ID);
} }
@ -83,43 +85,51 @@ public class FormAccessElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
po.saveEx(); po.saveEx();
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Form_ID = Env.getContextAsInt(ctx, X_AD_Form.COLUMNNAME_AD_Form_ID); int AD_Form_ID = Env.getContextAsInt(ctx.ctx, X_AD_Form.COLUMNNAME_AD_Form_ID);
int AD_Role_ID = Env.getContextAsInt(ctx, X_AD_Role.COLUMNNAME_AD_Role_ID); int AD_Role_ID = Env.getContextAsInt(ctx.ctx, X_AD_Role.COLUMNNAME_AD_Role_ID);
MFormAccess po = null;
Query query = new Query(ctx.ctx, "AD_Form_Access", "AD_Form_ID = ? AND AD_Role_ID = ?", getTrxName(ctx));
po = query.setParameters(new Object[]{AD_Form_ID, AD_Role_ID}).<MFormAccess>first();
if (po != null) {
if (ctx.packOut.getFromDate() != null) {
if (po.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_Form_Access.Table_Name, atts); document.startElement("", "", I_AD_Form_Access.Table_Name, atts);
createFormAccessBinding(ctx, document, AD_Form_ID, AD_Role_ID); createFormAccessBinding(ctx, document, po);
document.endElement("", "", I_AD_Form_Access.Table_Name); document.endElement("", "", I_AD_Form_Access.Table_Name);
} }
}
private void createFormAccessBinding(Properties ctx, TransformerHandler document, private void createFormAccessBinding(PIPOContext ctx, TransformerHandler document,
int formId, int roleId) { MFormAccess po) {
MFormAccess po = null;
Query query = new Query(ctx, "AD_Form_Access", "AD_Form_ID = ? AND AD_Role_ID = ?", getTrxName(ctx));
po = query.setParameters(new Object[]{formId, roleId}).<MFormAccess>first();
if (po != null) {
PoExporter filler = new PoExporter(ctx, document, po); PoExporter filler = new PoExporter(ctx, document, po);
List<String> excludes = defaultExcludeList(X_AD_Form_Access.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Form_Access.Table_Name);
filler.export(excludes); filler.export(excludes);
} }
}
@Override @Override
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
// TODO Auto-generated method stub
} }
} }

View File

@ -19,11 +19,11 @@ package org.adempiere.pipo2.handler;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -42,16 +42,16 @@ public class FormElementHandler extends AbstractElementHandler {
private List<Integer> forms = new ArrayList<Integer>(); private List<Integer> forms = new ArrayList<Integer>();
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_Form.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Form.Table_Name);
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
MForm mForm = findPO(ctx, element); MForm mForm = findPO(ctx, element);
if (mForm == null) { if (mForm == null) {
String name = getStringValue(element, "Name"); String name = getStringValue(element, "Name");
int id = findIdByName(ctx, "AD_Form", name); int id = findIdByName(ctx, "AD_Form", name);
mForm = new MForm(ctx, id > 0 ? id : 0, getTrxName(ctx)); mForm = new MForm(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }
PoFiller filler = new PoFiller(ctx, mForm, element, this); PoFiller filler = new PoFiller(ctx, mForm, element, this);
@ -63,6 +63,7 @@ public class FormElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -83,7 +84,7 @@ public class FormElementHandler extends AbstractElementHandler {
} }
else{ else{
logImportDetail (ctx, impDetail, 0, mForm.getName(), mForm.get_ID(), action); logImportDetail (ctx, impDetail, 0, mForm.getName(), mForm.get_ID(), action);
throw new POSaveFailedException("Failed to save form definition"); throw new POSaveFailedException("Failed to save form definition " + mForm.getName());
} }
} }
} else { } else {
@ -91,16 +92,23 @@ public class FormElementHandler extends AbstractElementHandler {
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
protected void create(Properties ctx, TransformerHandler document) protected void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Form_ID = Env.getContextAsInt(ctx, "AD_Form_ID"); int AD_Form_ID = Env.getContextAsInt(ctx.ctx, "AD_Form_ID");
if (forms.contains(AD_Form_ID)) return; if (forms.contains(AD_Form_ID)) return;
forms.add(AD_Form_ID); forms.add(AD_Form_ID);
X_AD_Form m_Form = new X_AD_Form (ctx, AD_Form_ID, null); X_AD_Form m_Form = new X_AD_Form (ctx.ctx, AD_Form_ID, null);
if (ctx.packOut.getFromDate() != null) {
if (m_Form.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("","",I_AD_Form.Table_Name,atts); document.startElement("","",I_AD_Form.Table_Name,atts);
@ -108,7 +116,7 @@ public class FormElementHandler extends AbstractElementHandler {
document.endElement("","",I_AD_Form.Table_Name); document.endElement("","",I_AD_Form.Table_Name);
} }
private void createFormBinding(Properties ctx, TransformerHandler document, X_AD_Form m_Form) private void createFormBinding(PIPOContext ctx, TransformerHandler document, X_AD_Form m_Form)
{ {
PoExporter filler = new PoExporter(ctx, document, m_Form); PoExporter filler = new PoExporter(ctx, document, m_Form);
List<String> excludes = defaultExcludeList(X_AD_Form.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Form.Table_Name);
@ -121,8 +129,8 @@ public class FormElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_Form_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Form_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Form_ID); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Form_ID);
} }
} }

View File

@ -21,7 +21,6 @@ import java.sql.ResultSet;
import java.sql.Statement; import java.sql.Statement;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
@ -29,11 +28,13 @@ import org.adempiere.exceptions.AdempiereException;
import org.adempiere.model.GenericPO; import org.adempiere.model.GenericPO;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.DataElementParameters; import org.adempiere.pipo2.DataElementParameters;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PackoutItem; import org.adempiere.pipo2.PackoutItem;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
import org.adempiere.pipo2.PoFiller; import org.adempiere.pipo2.PoFiller;
import org.adempiere.pipo2.ReferenceUtils;
import org.compiere.model.MColumn; import org.compiere.model.MColumn;
import org.compiere.model.MRole; import org.compiere.model.MRole;
import org.compiere.model.MTable; import org.compiere.model.MTable;
@ -54,27 +55,30 @@ import org.xml.sax.helpers.AttributesImpl;
*/ */
public class GenericPOElementHandler extends AbstractElementHandler { public class GenericPOElementHandler extends AbstractElementHandler {
public GenericPOElementHandler() { private String tableName;
public GenericPOElementHandler(String tableName) {
this.tableName = tableName;
} }
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
String tableName = element.getElementValue(); String tableName = element.getElementValue();
PO po = findPO(ctx, element); PO po = findPO(ctx, element);
if (po == null) { if (po == null) {
MTable table = MTable.get(ctx, tableName); String uuidColumn = PO.getUUIDColumnName(tableName);
POInfo info = POInfo.getPOInfo(ctx, table.getAD_Table_ID()); String idColumn = tableName + "_ID";
MTable table = MTable.get(ctx.ctx, tableName);
if ((!element.properties.containsKey(uuidColumn) || element.properties.get(uuidColumn).contents == null || element.properties.get(uuidColumn).contents.toString().trim().length() > 0)
&& (!element.properties.containsKey(idColumn) || element.properties.get(idColumn).contents == null || element.properties.get(idColumn).contents.toString().trim().length() > 0)) {
POInfo info = POInfo.getPOInfo(ctx.ctx, table.getAD_Table_ID());
MColumn columns[] = table.getColumns(false); MColumn columns[] = table.getColumns(false);
StringBuffer whereClause = new StringBuffer(); StringBuffer whereClause = new StringBuffer();
List<Object> parameters = new ArrayList<Object>(); List<Object> parameters = new ArrayList<Object>();
boolean search = true;
for(int i = 0; i < columns.length; i++) { for(int i = 0; i < columns.length; i++) {
MColumn column = columns[i]; MColumn column = columns[i];
if (column.isIdentifier()) { if (column.isParent()) {
if (whereClause.length() > 0)
whereClause.append(" AND ");
whereClause.append(column.getColumnName()).append(" = ? ");
parameters.add(getStringValue(element, column.getColumnName()));
} else if (column.isParent()) {
int parentId = 0; int parentId = 0;
String parentTableName = null; String parentTableName = null;
if (column.getAD_Reference_ID() == DisplayType.TableDir) { if (column.getAD_Reference_ID() == DisplayType.TableDir) {
@ -92,18 +96,71 @@ public class GenericPOElementHandler extends AbstractElementHandler {
} }
parent = parent.parent; parent = parent.parent;
} }
if (parentId == 0) {
Element parentElement = element.properties.get(column.getColumnName());
if (parentElement != null) {
parentId = ReferenceUtils.resolveReference(ctx.ctx, parentElement, getTrxName(ctx));
}
}
if (parentId > 0) { if (parentId > 0) {
if (whereClause.length() > 0) if (whereClause.length() > 0)
whereClause.append(" AND "); whereClause.append(" AND ");
whereClause.append(column.getColumnName()).append(" = ?"); whereClause.append(column.getColumnName()).append(" = ?");
parameters.add(parentId); parameters.add(parentId);
} else {
search = false;
break;
}
} else if (column.isIdentifier()) {
if (whereClause.length() > 0)
whereClause.append(" AND ");
whereClause.append(column.getColumnName()).append(" = ? ");
String refTableName = null;
if (column.getAD_Reference_ID() == DisplayType.TableDir) {
refTableName = column.getColumnName().substring(0, column.getColumnName().length() - 3);
} else if (column.getAD_Reference_ID() == DisplayType.Table ||
column.getAD_Reference_ID() == DisplayType.Search) {
String searchColumn = info.getColumnLookup(i).getColumnName();
refTableName = searchColumn.substring(0, searchColumn.indexOf("."));
}
if (refTableName == null) {
parameters.add(getStringValue(element, column.getColumnName()));
} else {
int refId = 0;
Element parent = element.parent;
while (parent != null) {
if (parent.getElementValue().equalsIgnoreCase(refTableName)) {
refId = parent.recordId;
break;
}
parent = parent.parent;
}
if (refId == 0) {
Element refElement = element.properties.get(column.getColumnName());
if (refElement != null) {
refId = ReferenceUtils.resolveReference(ctx.ctx, refElement, getTrxName(ctx));
}
}
if (refId > 0) {
parameters.add(refId);
} else {
search = false;
break;
} }
} }
} }
Query query = new Query(ctx, table, whereClause.toString(), getTrxName(ctx)); }
po = query.setParameters(parameters).first(); if (whereClause.length() > 0 && search) {
Query query = new Query(ctx.ctx, table, whereClause.toString(), getTrxName(ctx));
po = query.setParameters(parameters).setApplyAccessFilter(true).first();
}
}
if (po == null) { if (po == null) {
po = new GenericPO(tableName, ctx, 0); po = table.getPO(0, getTrxName(ctx));
} }
} }
PoFiller filler = new PoFiller(ctx, po, element, this); PoFiller filler = new PoFiller(ctx, po, element, this);
@ -115,27 +172,39 @@ public class GenericPOElementHandler extends AbstractElementHandler {
try { try {
id = Integer.parseInt(idElement.contents.toString()); id = Integer.parseInt(idElement.contents.toString());
if (id > 0 && id <= PackOut.MAX_OFFICIAL_ID) { if (id > 0 && id <= PackOut.MAX_OFFICIAL_ID) {
po.set_ValueOfColumn(tableName + "_ID", id); po.set_ValueNoCheck(tableName + "_ID", id);
} }
} catch (Exception e) {} } catch (Exception e) {}
} }
} }
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
/* Verify if the table has entitytype and check dictionary maintenance */
int idxet = po.get_ColumnIndex("EntityType");
if (idxet >= 0) {
String entityType = (String) po.get_Value(idxet);
if (! isProcessElement(ctx.ctx, entityType)) {
log.info("Generic PO not processed as it's official " + po.toString());
element.skip = true;
return;
}
}
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
po.saveEx(); po.saveEx();
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
String sql = Env.getContext(ctx, DataElementParameters.SQL_STATEMENT); String sql = Env.getContext(ctx.ctx, DataElementParameters.SQL_STATEMENT);
String components[] = null; String components[] = null;
if (sql.indexOf(";") > 0) { if (sql.indexOf(";") > 0) {
components = sql.split("[;]"); components = sql.split("[;]");
@ -143,8 +212,8 @@ public class GenericPOElementHandler extends AbstractElementHandler {
} else { } else {
components = new String[]{sql}; components = new String[]{sql};
} }
int tableId = Env.getContextAsInt(ctx, DataElementParameters.AD_TABLE_ID); int tableId = Env.getContextAsInt(ctx.ctx, DataElementParameters.AD_TABLE_ID);
String tableName = MTable.getTableName(ctx, tableId); String tableName = MTable.getTableName(ctx.ctx, tableId);
List<String> excludes = defaultExcludeList(tableName); List<String> excludes = defaultExcludeList(tableName);
Statement stmt = null; Statement stmt = null;
ResultSet rs = null; ResultSet rs = null;
@ -153,21 +222,37 @@ public class GenericPOElementHandler extends AbstractElementHandler {
stmt = DB.createStatement(); stmt = DB.createStatement();
rs = stmt.executeQuery(sql); rs = stmt.executeQuery(sql);
while (rs.next()) { while (rs.next()) {
GenericPO po = new GenericPO(tableName, ctx, rs); GenericPO po = new GenericPO(tableName, ctx.ctx, rs, getTrxName(ctx));
int AD_Client_ID = po.getAD_Client_ID(); int AD_Client_ID = po.getAD_Client_ID();
if (AD_Client_ID != Env.getAD_Client_ID(ctx)) if (AD_Client_ID != Env.getAD_Client_ID(ctx.ctx))
continue; continue;
boolean createElement = true;
if (ctx.packOut.getFromDate() != null) {
if (po.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
createElement = false;
}
}
if (createElement) {
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("","", tableName, atts); document.startElement("","", tableName, atts);
PoExporter filler = new PoExporter(ctx, document, po); PoExporter filler = new PoExporter(ctx, document, po);
filler.export(excludes, true); filler.export(excludes, true);
if (po.get_ID() > 0 && po.get_ID() < 1000000) {
filler.add(tableName+"_ID", new AttributesImpl());
}
}
for (int i = 1; i < components.length; i++) { for (int i = 1; i < components.length; i++) {
String tables[] = components[i].split("[>]"); String tables[] = components[i].split("[>]");
exportDetail(ctx, document, po, 0, tables); exportDetail(ctx, document, po, 0, tables);
} }
if (createElement) {
document.endElement("","",tableName); document.endElement("","",tableName);
} }
}
} catch (Exception e) { } catch (Exception e) {
throw new AdempiereException(e); throw new AdempiereException(e);
} finally { } finally {
@ -175,7 +260,7 @@ public class GenericPOElementHandler extends AbstractElementHandler {
} }
} }
private void exportDetail(Properties ctx, TransformerHandler document, GenericPO parent, int index, String[] tables) { private void exportDetail(PIPOContext ctx, TransformerHandler document, GenericPO parent, int index, String[] tables) {
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
String sql = "SELECT * FROM " + tables[index] + " WHERE " + parent.get_TableName() + "_ID = ?"; String sql = "SELECT * FROM " + tables[index] + " WHERE " + parent.get_TableName() + "_ID = ?";
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
@ -186,19 +271,31 @@ public class GenericPOElementHandler extends AbstractElementHandler {
pstmt.setInt(1, parent.get_ID()); pstmt.setInt(1, parent.get_ID());
rs = pstmt.executeQuery(); rs = pstmt.executeQuery();
while (rs.next()) { while (rs.next()) {
GenericPO po = new GenericPO(tables[index], ctx, rs); GenericPO po = new GenericPO(tables[index], ctx.ctx, rs, getTrxName(ctx));
int AD_Client_ID = po.getAD_Client_ID(); int AD_Client_ID = po.getAD_Client_ID();
if (AD_Client_ID != Env.getAD_Client_ID(ctx)) if (AD_Client_ID != Env.getAD_Client_ID(ctx.ctx))
continue; continue;
boolean createElement = true;
if (ctx.packOut.getFromDate() != null) {
if (po.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
createElement = false;
}
}
if (createElement) {
List<String> excludes = defaultExcludeList(tables[index]); List<String> excludes = defaultExcludeList(tables[index]);
addTypeName(atts, "table");
document.startElement("", "", tables[index], atts); document.startElement("", "", tables[index], atts);
PoExporter filler = new PoExporter(ctx, document, po); PoExporter filler = new PoExporter(ctx, document, po);
filler.export(excludes, true); filler.export(excludes, true);
}
if (index + 1 < tables.length) { if (index + 1 < tables.length) {
exportDetail(ctx, document, po, index+1, tables); exportDetail(ctx, document, po, index+1, tables);
} }
if (createElement) {
document.endElement("","",tables[index]); document.endElement("","",tables[index]);
} }
}
} catch (Exception e) { } catch (Exception e) {
throw new AdempiereException(e); throw new AdempiereException(e);
} finally { } finally {
@ -210,10 +307,22 @@ public class GenericPOElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
PackoutItem detail = packout.getCurrentPackoutItem(); PackoutItem detail = packout.getCurrentPackoutItem();
Env.setContext(packout.getCtx(), DataElementParameters.AD_TABLE_ID, (Integer)detail.getProperty(DataElementParameters.AD_TABLE_ID)); int tableId = 0;
Env.setContext(packout.getCtx(), DataElementParameters.SQL_STATEMENT, (String)detail.getProperty(DataElementParameters.SQL_STATEMENT)); String sql = null;
if (detail.getProperty(DataElementParameters.AD_TABLE_ID) != null)
{
tableId = (Integer)detail.getProperty(DataElementParameters.AD_TABLE_ID);
sql = (String)detail.getProperty(DataElementParameters.SQL_STATEMENT);
}
else
{
tableId = MTable.get(packout.getCtx().ctx, tableName).getAD_Table_ID();
sql = "SELECT * FROM " + tableName + " WHERE " + tableName + "_ID=" + recordId;
}
packout.getCtx().ctx.put(DataElementParameters.AD_TABLE_ID, tableId);
packout.getCtx().ctx.put(DataElementParameters.SQL_STATEMENT, sql);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(DataElementParameters.AD_TABLE_ID); packout.getCtx().ctx.remove(DataElementParameters.AD_TABLE_ID);
packout.getCtx().remove(DataElementParameters.SQL_STATEMENT); packout.getCtx().ctx.remove(DataElementParameters.SQL_STATEMENT);
} }
} }

View File

@ -20,12 +20,12 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -48,7 +48,7 @@ public class ImpFormatElementHandler extends AbstractElementHandler {
private List<Integer> formats = new ArrayList<Integer>(); private List<Integer> formats = new ArrayList<Integer>();
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_ImpFormat.Table_Name); List<String> excludes = defaultExcludeList(X_AD_ImpFormat.Table_Name);
@ -57,7 +57,7 @@ public class ImpFormatElementHandler extends AbstractElementHandler {
X_AD_ImpFormat mImpFormat = findPO(ctx, element); X_AD_ImpFormat mImpFormat = findPO(ctx, element);
if (mImpFormat == null) { if (mImpFormat == null) {
int id = findIdByName(ctx, "AD_ImpFormat", name); int id = findIdByName(ctx, "AD_ImpFormat", name);
mImpFormat = new X_AD_ImpFormat(ctx, id > 0 ? id : 0, mImpFormat = new X_AD_ImpFormat(ctx.ctx, id > 0 ? id : 0,
getTrxName(ctx)); getTrxName(ctx));
} }
PoFiller filler = new PoFiller(ctx, mImpFormat, element, this); PoFiller filler = new PoFiller(ctx, mImpFormat, element, this);
@ -70,6 +70,7 @@ public class ImpFormatElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -89,27 +90,37 @@ public class ImpFormatElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, mImpFormat.getName(), mImpFormat logImportDetail(ctx, impDetail, 0, mImpFormat.getName(), mImpFormat
.get_ID(), action); .get_ID(), action);
throw new POSaveFailedException("Failed to save Import Format."); throw new POSaveFailedException("Failed to save Import Format " + mImpFormat.getName());
} }
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
protected void create(Properties ctx, TransformerHandler document) protected void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int import_id = Env.getContextAsInt(ctx, int import_id = Env.getContextAsInt(ctx.ctx,
X_AD_Package_Exp_Detail.COLUMNNAME_AD_ImpFormat_ID); X_AD_Package_Exp_Detail.COLUMNNAME_AD_ImpFormat_ID);
if (formats.contains(import_id)) if (formats.contains(import_id))
return; return;
formats.add(import_id); formats.add(import_id);
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
X_AD_ImpFormat m_ImpFormat = new X_AD_ImpFormat(ctx, import_id, null); X_AD_ImpFormat m_ImpFormat = new X_AD_ImpFormat(ctx.ctx, import_id, null);
boolean createElement = true;
if (ctx.packOut.getFromDate() != null) {
if (m_ImpFormat.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
createElement = false;
}
}
if (createElement) {
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_ImpFormat.Table_Name, atts); document.startElement("", "", I_AD_ImpFormat.Table_Name, atts);
createImpFormatBinding(ctx, document, m_ImpFormat); createImpFormatBinding(ctx, document, m_ImpFormat);
}
String sql = "SELECT * FROM AD_ImpFormat_Row WHERE AD_ImpFormat_ID= " String sql = "SELECT * FROM AD_ImpFormat_Row WHERE AD_ImpFormat_ID= "
+ import_id; + import_id;
@ -130,20 +141,23 @@ public class ImpFormatElementHandler extends AbstractElementHandler {
} finally { } finally {
DB.close(rs, pstmt); DB.close(rs, pstmt);
} }
if (createElement) {
document.endElement("", "", I_AD_ImpFormat.Table_Name); document.endElement("", "", I_AD_ImpFormat.Table_Name);
}
} }
private void createImpFormatRow(Properties ctx, private void createImpFormatRow(PIPOContext ctx,
TransformerHandler document, int AD_ImpFormat_Row_ID) TransformerHandler document, int AD_ImpFormat_Row_ID)
throws SAXException { throws SAXException {
Env.setContext(ctx, X_AD_ImpFormat_Row.COLUMNNAME_AD_ImpFormat_Row_ID, Env.setContext(ctx.ctx, X_AD_ImpFormat_Row.COLUMNNAME_AD_ImpFormat_Row_ID,
AD_ImpFormat_Row_ID); AD_ImpFormat_Row_ID);
rowHandler.create(ctx, document); rowHandler.create(ctx, document);
ctx.remove(X_AD_ImpFormat_Row.COLUMNNAME_AD_ImpFormat_Row_ID); ctx.ctx.remove(X_AD_ImpFormat_Row.COLUMNNAME_AD_ImpFormat_Row_ID);
} }
private void createImpFormatBinding(Properties ctx, TransformerHandler document, private void createImpFormatBinding(PIPOContext ctx, TransformerHandler document,
X_AD_ImpFormat m_ImpFormat) { X_AD_ImpFormat m_ImpFormat) {
PoExporter filler = new PoExporter(ctx, document, m_ImpFormat); PoExporter filler = new PoExporter(ctx, document, m_ImpFormat);
List<String> excludes = defaultExcludeList(X_AD_ImpFormat.Table_Name); List<String> excludes = defaultExcludeList(X_AD_ImpFormat.Table_Name);
@ -156,8 +170,8 @@ public class ImpFormatElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_ImpFormat_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_ImpFormat_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_ImpFormat_ID); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_ImpFormat_ID);
} }
} }

View File

@ -17,11 +17,11 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -39,7 +39,7 @@ import org.xml.sax.helpers.AttributesImpl;
public class ImpFormatRowElementHandler extends AbstractElementHandler { public class ImpFormatRowElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
String action = null; String action = null;
List<String> excludes = defaultExcludeList(X_AD_ImpFormat_Row.Table_Name); List<String> excludes = defaultExcludeList(X_AD_ImpFormat_Row.Table_Name);
@ -57,20 +57,21 @@ public class ImpFormatRowElementHandler extends AbstractElementHandler {
} else { } else {
Element e = element.properties.get(I_AD_ImpFormat_Row.COLUMNNAME_AD_ImpFormat_ID); Element e = element.properties.get(I_AD_ImpFormat_Row.COLUMNNAME_AD_ImpFormat_ID);
if (ReferenceUtils.isIDLookup(e) || ReferenceUtils.isUUIDLookup(e)) if (ReferenceUtils.isIDLookup(e) || ReferenceUtils.isUUIDLookup(e))
impFormatId = ReferenceUtils.resolveReference(ctx, e, getTrxName(ctx)); impFormatId = ReferenceUtils.resolveReference(ctx.ctx, e, getTrxName(ctx));
else else
impFormatId = findIdByName(ctx, "AD_ImpFormat", e.contents.toString()); impFormatId = findIdByName(ctx, "AD_ImpFormat", e.contents.toString());
} }
if (impFormatId <= 0) { if (impFormatId <= 0) {
element.defer = true; element.defer = true;
element.unresolved = "AD_ImpFormat_ID";
return; return;
} }
Element tableElement = element.properties.get(I_AD_ImpFormat.COLUMNNAME_AD_Table_ID); Element tableElement = element.properties.get(I_AD_ImpFormat.COLUMNNAME_AD_Table_ID);
int tableId = 0; int tableId = 0;
if (ReferenceUtils.isIDLookup(tableElement) || ReferenceUtils.isUUIDLookup(tableElement)) { if (ReferenceUtils.isIDLookup(tableElement) || ReferenceUtils.isUUIDLookup(tableElement)) {
tableId = ReferenceUtils.resolveReference(ctx, tableElement, getTrxName(ctx)); tableId = ReferenceUtils.resolveReference(ctx.ctx, tableElement, getTrxName(ctx));
} else { } else {
String tableName = getStringValue(element, I_AD_ImpFormat.COLUMNNAME_AD_Table_ID, excludes); String tableName = getStringValue(element, I_AD_ImpFormat.COLUMNNAME_AD_Table_ID, excludes);
@ -79,6 +80,7 @@ public class ImpFormatRowElementHandler extends AbstractElementHandler {
} }
if (tableId <= 0) { if (tableId <= 0) {
element.defer = true; element.defer = true;
element.unresolved = "AD_Table_ID";
return; return;
} }
} }
@ -86,7 +88,7 @@ public class ImpFormatRowElementHandler extends AbstractElementHandler {
Element columnElement = element.properties.get(I_AD_ImpFormat_Row.COLUMNNAME_AD_Column_ID); Element columnElement = element.properties.get(I_AD_ImpFormat_Row.COLUMNNAME_AD_Column_ID);
int columnId = 0; int columnId = 0;
if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement)) { if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement)) {
columnId = ReferenceUtils.resolveReference(ctx, columnElement, getTrxName(ctx)); columnId = ReferenceUtils.resolveReference(ctx.ctx, columnElement, getTrxName(ctx));
} else { } else {
String columnName = getStringValue(element, I_AD_ImpFormat_Row.COLUMNNAME_AD_Column_ID, excludes); String columnName = getStringValue(element, I_AD_ImpFormat_Row.COLUMNNAME_AD_Column_ID, excludes);
@ -95,13 +97,14 @@ public class ImpFormatRowElementHandler extends AbstractElementHandler {
} }
if (columnId <= 0) { if (columnId <= 0) {
element.defer = true; element.defer = true;
element.unresolved = "AD_Column_ID";
return; return;
} }
} }
StringBuffer sqlB = new StringBuffer ("SELECT AD_ImpFormat_Row_ID FROM AD_ImpFormat_Row WHERE AD_Column_ID=? AND AD_ImpFormat_ID=?"); StringBuffer sqlB = new StringBuffer ("SELECT AD_ImpFormat_Row_ID FROM AD_ImpFormat_Row WHERE AD_Column_ID=? AND AD_ImpFormat_ID=?");
int id = DB.getSQLValue(getTrxName(ctx),sqlB.toString(),columnId,impFormatId); int id = DB.getSQLValue(getTrxName(ctx),sqlB.toString(),columnId,impFormatId);
mImpFormatRow = new X_AD_ImpFormat_Row(ctx, id > 0 ? id : 0, getTrxName(ctx)); mImpFormatRow = new X_AD_ImpFormat_Row(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mImpFormatRow.setAD_Column_ID(columnId); mImpFormatRow.setAD_Column_ID(columnId);
mImpFormatRow.setAD_ImpFormat_ID(impFormatId); mImpFormatRow.setAD_ImpFormat_ID(impFormatId);
@ -115,6 +118,7 @@ public class ImpFormatRowElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -133,18 +137,25 @@ public class ImpFormatRowElementHandler extends AbstractElementHandler {
} }
else{ else{
logImportDetail (ctx, impDetail, 0, mImpFormatRow.getName(), mImpFormatRow.get_ID(),action); logImportDetail (ctx, impDetail, 0, mImpFormatRow.getName(), mImpFormatRow.get_ID(),action);
throw new POSaveFailedException("Failed to import Import Format Row."); throw new POSaveFailedException("Failed to save Import Format Row " + mImpFormatRow.getName());
} }
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_ImpFormat_Row_ID = Env.getContextAsInt(ctx, X_AD_ImpFormat_Row.COLUMNNAME_AD_ImpFormat_Row_ID); int AD_ImpFormat_Row_ID = Env.getContextAsInt(ctx.ctx, X_AD_ImpFormat_Row.COLUMNNAME_AD_ImpFormat_Row_ID);
X_AD_ImpFormat_Row m_ImpFormat_Row = new X_AD_ImpFormat_Row (ctx, AD_ImpFormat_Row_ID, getTrxName(ctx)); X_AD_ImpFormat_Row m_ImpFormat_Row = new X_AD_ImpFormat_Row (ctx.ctx, AD_ImpFormat_Row_ID, getTrxName(ctx));
if (ctx.packOut.getFromDate() != null) {
if (m_ImpFormat_Row.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("","",I_AD_ImpFormat_Row.Table_Name,atts); document.startElement("","",I_AD_ImpFormat_Row.Table_Name,atts);
@ -152,12 +163,12 @@ public class ImpFormatRowElementHandler extends AbstractElementHandler {
document.endElement("","",I_AD_ImpFormat_Row.Table_Name); document.endElement("","",I_AD_ImpFormat_Row.Table_Name);
} }
private void createImpFormatRowBinding(Properties ctx, TransformerHandler document, X_AD_ImpFormat_Row m_ImpFormat_Row) private void createImpFormatRowBinding(PIPOContext ctx, TransformerHandler document, X_AD_ImpFormat_Row m_ImpFormat_Row)
{ {
PoExporter filler = new PoExporter(ctx, document, m_ImpFormat_Row); PoExporter filler = new PoExporter(ctx, document, m_ImpFormat_Row);
List<String> excludes = defaultExcludeList(X_AD_ImpFormat_Row.Table_Name); List<String> excludes = defaultExcludeList(X_AD_ImpFormat_Row.Table_Name);
String sql = null; String sql = "SELECT AD_Table_ID FROM AD_Column WHERE AD_Column_ID=?";
int tableId = DB.getSQLValue(null, sql,m_ImpFormat_Row.getAD_Column_ID()); int tableId = DB.getSQLValue(null, sql,m_ImpFormat_Row.getAD_Column_ID());
filler.addTableReference("AD_Table_ID", "AD_Table", "TableName", tableId, new AttributesImpl()); filler.addTableReference("AD_Table_ID", "AD_Table", "TableName", tableId, new AttributesImpl());
@ -174,8 +185,8 @@ public class ImpFormatRowElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
Env.setContext(packout.getCtx(), I_AD_ImpFormat_Row.COLUMNNAME_AD_ImpFormat_Row_ID, recordId); Env.setContext(packout.getCtx().ctx, I_AD_ImpFormat_Row.COLUMNNAME_AD_ImpFormat_Row_ID, recordId);
create(packout.getCtx(), packoutHandler); create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(I_AD_ImpFormat_Row.COLUMNNAME_AD_ImpFormat_Row_ID); packout.getCtx().ctx.remove(I_AD_ImpFormat_Row.COLUMNNAME_AD_ImpFormat_Row_ID);
} }
} }

View File

@ -20,7 +20,6 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.ResultSetMetaData; import java.sql.ResultSetMetaData;
import java.util.List; import java.util.List;
import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
@ -28,6 +27,7 @@ import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.exceptions.DBException; import org.adempiere.exceptions.DBException;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.ElementHandler; import org.adempiere.pipo2.ElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -52,7 +52,7 @@ import org.xml.sax.helpers.AttributesImpl;
public class MenuElementHandler extends AbstractElementHandler { public class MenuElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_Menu.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Menu.Table_Name);
@ -61,7 +61,7 @@ public class MenuElementHandler extends AbstractElementHandler {
if (mMenu == null) { if (mMenu == null) {
String menuName = getStringValue(element, "Name"); String menuName = getStringValue(element, "Name");
int menuId = findIdByColumn(ctx, "AD_Menu", "Name", menuName); int menuId = findIdByColumn(ctx, "AD_Menu", "Name", menuName);
mMenu = new X_AD_Menu(ctx, menuId > 0 ? menuId : 0, getTrxName(ctx)); mMenu = new X_AD_Menu(ctx.ctx, menuId > 0 ? menuId : 0, getTrxName(ctx));
} }
PoFiller filler = new PoFiller(ctx, mMenu, element, this); PoFiller filler = new PoFiller(ctx, mMenu, element, this);
@ -73,6 +73,7 @@ public class MenuElementHandler extends AbstractElementHandler {
List<String> notFounds = filler.autoFill(excludes); List<String> notFounds = filler.autoFill(excludes);
if (notFounds.size() > 0) { if (notFounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notFounds.toString();
return; return;
} }
@ -108,7 +109,7 @@ public class MenuElementHandler extends AbstractElementHandler {
int parentId = 0; int parentId = 0;
if (parentElement != null) { if (parentElement != null) {
if (ReferenceUtils.isIDLookup(parentElement) || ReferenceUtils.isUUIDLookup(parentElement)) { if (ReferenceUtils.isIDLookup(parentElement) || ReferenceUtils.isUUIDLookup(parentElement)) {
parentId = ReferenceUtils.resolveReference(ctx, parentElement, getTrxName(ctx)); parentId = ReferenceUtils.resolveReference(ctx.ctx, parentElement, getTrxName(ctx));
} else { } else {
String parent = getStringValue(element, "Parent_ID"); String parent = getStringValue(element, "Parent_ID");
parentId = findIdByName(ctx, "AD_Menu", parent); parentId = findIdByName(ctx, "AD_Menu", parent);
@ -116,11 +117,12 @@ public class MenuElementHandler extends AbstractElementHandler {
} }
StringBuffer updateSQL = null; StringBuffer updateSQL = null;
String sql = "SELECT count(Parent_ID) FROM AD_TREENODEMM WHERE AD_Tree_ID = 10" int AD_Tree_ID = getDefaultMenuTreeId();
String sql = "SELECT count(Parent_ID) FROM AD_TREENODEMM WHERE AD_Tree_ID = "+AD_Tree_ID
+ " AND Node_ID = " + mMenu.getAD_Menu_ID(); + " AND Node_ID = " + mMenu.getAD_Menu_ID();
int countRecords = DB.getSQLValue(getTrxName(ctx), sql); int countRecords = DB.getSQLValue(getTrxName(ctx), sql);
if (countRecords > 0) { if (countRecords > 0) {
sql = "select * from AD_TREENODEMM where AD_Tree_ID = 10 and " sql = "select * from AD_TREENODEMM where AD_Tree_ID = "+AD_Tree_ID+" and "
+ " Node_ID =?"; + " Node_ID =?";
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
ResultSet rs = null; ResultSet rs = null;
@ -154,9 +156,9 @@ public class MenuElementHandler extends AbstractElementHandler {
colValue = obj == null ? "" : obj.toString(); colValue = obj == null ? "" : obj.toString();
} }
X_AD_Package_Imp_Backup backup = new X_AD_Package_Imp_Backup(ctx, 0, getTrxName(ctx)); X_AD_Package_Imp_Backup backup = new X_AD_Package_Imp_Backup(ctx.ctx, 0, getTrxName(ctx));
backup.setAD_Package_Imp_Detail_ID(impDetail.getAD_Package_Imp_Detail_ID()); backup.setAD_Package_Imp_Detail_ID(impDetail.getAD_Package_Imp_Detail_ID());
backup.setAD_Package_Imp_ID(getPackageImpId(ctx)); backup.setAD_Package_Imp_ID(getPackageImpId(ctx.ctx));
backup.setAD_Table_ID(tableID); backup.setAD_Table_ID(tableID);
backup.setAD_Column_ID(columnID); backup.setAD_Column_ID(columnID);
backup.setAD_Reference_ID(referenceID); backup.setAD_Reference_ID(referenceID);
@ -175,26 +177,30 @@ public class MenuElementHandler extends AbstractElementHandler {
updateSQL = new StringBuffer("UPDATE AD_TREENODEMM ").append( updateSQL = new StringBuffer("UPDATE AD_TREENODEMM ").append(
"SET Parent_ID = " + parentId).append( "SET Parent_ID = " + parentId).append(
" , SeqNo = " + getStringValue(element, "SeqNo")).append( " , SeqNo = " + getStringValue(element, "SeqNo")).append(
" WHERE AD_Tree_ID = 10").append( " WHERE AD_Tree_ID = "+AD_Tree_ID).append(
" AND Node_ID = " + mMenu.getAD_Menu_ID()); " AND Node_ID = " + mMenu.getAD_Menu_ID());
} else { } else {
updateSQL = new StringBuffer("Insert INTO AD_TREENODEMM").append( updateSQL = new StringBuffer("Insert INTO AD_TREENODEMM").append(
"(AD_Client_ID, AD_Org_ID, CreatedBy, UpdatedBy, ").append( "(AD_Client_ID, AD_Org_ID, CreatedBy, UpdatedBy, ").append(
"Parent_ID, SeqNo, AD_Tree_ID, Node_ID)").append( "Parent_ID, SeqNo, AD_Tree_ID, Node_ID)").append(
"VALUES(0, 0, 0, 0, ").append( "VALUES(0, 0, 0, 0, ").append(
parentId + "," + getStringValue(element, "SeqNo") + ", 10, " parentId + "," + getStringValue(element, "SeqNo") + ", "+AD_Tree_ID+", "
+ mMenu.getAD_Menu_ID() + ")"); + mMenu.getAD_Menu_ID() + ")");
} }
DB.executeUpdateEx(updateSQL.toString(), getTrxName(ctx)); DB.executeUpdate(updateSQL.toString(), getTrxName(ctx));
} }
public void endElement(Properties ctx, Element element) throws SAXException { private int getDefaultMenuTreeId() {
return DB.getSQLValue(null, "SELECT MIN(AD_Tree_ID) FROM AD_Tree WHERE IsDefault='Y' AND TreeType='MM' AND AD_Client_ID=0");
} }
public void create(Properties ctx, TransformerHandler document) public void endElement(PIPOContext ctx, Element element) throws SAXException {
}
public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Menu_ID = Env.getContextAsInt(ctx, "AD_Menu_ID"); int AD_Menu_ID = Env.getContextAsInt(ctx.ctx, "AD_Menu_ID");
X_AD_Menu m_Menu = new X_AD_Menu(ctx, AD_Menu_ID, null); X_AD_Menu m_Menu = new X_AD_Menu(ctx.ctx, AD_Menu_ID, null);
if (m_Menu.isSummary() == false) { if (m_Menu.isSummary() == false) {
createApplication(ctx, document, AD_Menu_ID); createApplication(ctx, document, AD_Menu_ID);
} else { } else {
@ -207,17 +213,18 @@ public class MenuElementHandler extends AbstractElementHandler {
} }
} }
private void createMenuBinding(Properties ctx, TransformerHandler document, private void createMenuBinding(PIPOContext ctx, TransformerHandler document,
X_AD_Menu m_Menu) { X_AD_Menu m_Menu) {
PoExporter filler = new PoExporter(ctx, document, m_Menu); PoExporter filler = new PoExporter(ctx, document, m_Menu);
List<String> excludes = defaultExcludeList(X_AD_Menu.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Menu.Table_Name);
String sql = "SELECT Parent_ID FROM AD_TreeNoDemm WHERE AD_Tree_ID = 10 and Node_ID=?"; int AD_Tree_ID = getDefaultMenuTreeId();
String sql = "SELECT Parent_ID FROM AD_TreeNoDemm WHERE AD_Tree_ID = "+AD_Tree_ID+" and Node_ID=?";
int id = DB.getSQLValue(null, sql, m_Menu.getAD_Menu_ID()); int id = DB.getSQLValue(null, sql, m_Menu.getAD_Menu_ID());
if (id > 0) { if (id > 0) {
filler.addTableReference("Parent_ID", "AD_Menu", "Name", id, new AttributesImpl()); filler.addTableReference("Parent_ID", "AD_Menu", "Name", id, new AttributesImpl());
} }
sql = "SELECT SeqNo FROM AD_TreeNoDemm WHERE AD_Tree_ID = 10 and Node_ID=?"; sql = "SELECT SeqNo FROM AD_TreeNoDemm WHERE AD_Tree_ID = "+AD_Tree_ID+" and Node_ID=?";
int seqNo = DB.getSQLValue(null, sql, m_Menu.getAD_Menu_ID()); int seqNo = DB.getSQLValue(null, sql, m_Menu.getAD_Menu_ID());
filler.addString("SeqNo", Integer.toString(seqNo), new AttributesImpl()); filler.addString("SeqNo", Integer.toString(seqNo), new AttributesImpl());
if (m_Menu.getAD_Menu_ID() <= PackOut.MAX_OFFICIAL_ID) if (m_Menu.getAD_Menu_ID() <= PackOut.MAX_OFFICIAL_ID)
@ -226,16 +233,16 @@ public class MenuElementHandler extends AbstractElementHandler {
filler.export(excludes); filler.export(excludes);
} }
private void createApplication(Properties ctx, TransformerHandler document, private void createApplication(PIPOContext ctx, TransformerHandler document,
int AD_Menu_ID) throws SAXException { int AD_Menu_ID) throws SAXException {
PackOut packOut = (PackOut)ctx.get("PackOutProcess"); PackOut packOut = ctx.packOut;
String sql = null; String sql = null;
// int x = 0; int AD_Tree_ID = getDefaultMenuTreeId();
sql = "SELECT A.Node_ID, B.AD_Menu_ID, B.Name, B.AD_WINDOW_ID, B.AD_WORKFLOW_ID, B.AD_TASK_ID, " sql = "SELECT A.Node_ID, B.AD_Menu_ID, B.Name, B.AD_WINDOW_ID, B.AD_WORKFLOW_ID, B.AD_TASK_ID, "
+ "B.AD_PROCESS_ID, B.AD_FORM_ID, B.AD_WORKBENCH_ID " + "B.AD_PROCESS_ID, B.AD_FORM_ID, B.AD_WORKBENCH_ID "
+ "FROM AD_TreeNoDemm A, AD_Menu B " + "FROM AD_TreeNodeMM A, AD_Menu B "
+ "WHERE A.Node_ID = " + "WHERE A.Node_ID = "
+ AD_Menu_ID + " AND A.Node_ID = B.AD_Menu_ID"; + AD_Menu_ID + " AND A.Node_ID = B.AD_Menu_ID" + " AND A.AD_Tree_ID="+AD_Tree_ID;
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
ResultSet rs = null; ResultSet rs = null;
@ -244,7 +251,7 @@ public class MenuElementHandler extends AbstractElementHandler {
rs = pstmt.executeQuery(); rs = pstmt.executeQuery();
while (rs.next()) { while (rs.next()) {
X_AD_Menu m_Menu = new X_AD_Menu(ctx, rs.getInt("AD_Menu_ID"), X_AD_Menu m_Menu = new X_AD_Menu(ctx.ctx, rs.getInt("AD_Menu_ID"),
null); null);
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
@ -294,15 +301,16 @@ public class MenuElementHandler extends AbstractElementHandler {
} }
} }
public void createModule(Properties ctx, TransformerHandler document, public void createModule(PIPOContext ctx, TransformerHandler document,
int menu_id) throws SAXException { int menu_id) throws SAXException {
PackOut packOut = (PackOut)ctx.get("PackOutProcess"); PackOut packOut = ctx.packOut;
String sql = null; String sql = null;
int AD_Tree_ID = getDefaultMenuTreeId();
sql = "SELECT A.Node_ID, B.AD_Menu_ID, B.Name, B.AD_WINDOW_ID, B.AD_WORKFLOW_ID, B.AD_TASK_ID, " sql = "SELECT A.Node_ID, B.AD_Menu_ID, B.Name, B.AD_WINDOW_ID, B.AD_WORKFLOW_ID, B.AD_TASK_ID, "
+ "B.AD_PROCESS_ID, B.AD_FORM_ID, B.AD_WORKBENCH_ID " + "B.AD_PROCESS_ID, B.AD_FORM_ID, B.AD_WORKBENCH_ID "
+ "FROM AD_TreeNoDemm A, AD_Menu B " + "FROM AD_TreeNodeMM A, AD_Menu B "
+ "WHERE A.Parent_ID = " + "WHERE A.Parent_ID = "
+ menu_id + " AND A.Node_ID = B.AD_Menu_ID"; + menu_id + " AND A.Node_ID = B.AD_Menu_ID" + " AND A.AD_Tree_ID="+AD_Tree_ID;
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
ResultSet rs = null; ResultSet rs = null;
@ -311,7 +319,7 @@ public class MenuElementHandler extends AbstractElementHandler {
rs = pstmt.executeQuery(); rs = pstmt.executeQuery();
while (rs.next()) { while (rs.next()) {
// Menu tag Start. // Menu tag Start.
X_AD_Menu m_Menu = new X_AD_Menu(ctx, rs.getInt("AD_Menu_ID"), X_AD_Menu m_Menu = new X_AD_Menu(ctx.ctx, rs.getInt("AD_Menu_ID"),
null); null);
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
@ -364,9 +372,9 @@ public class MenuElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler, int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler, int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_Menu_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Menu_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Menu_ID); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Menu_ID);
} }
} }

View File

@ -18,11 +18,11 @@ package org.adempiere.pipo2.handler;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -41,15 +41,15 @@ public class MessageElementHandler extends AbstractElementHandler {
private List<Integer> messages = new ArrayList<Integer>(); private List<Integer> messages = new ArrayList<Integer>();
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
MMessage mMessage = findPO(ctx, element); MMessage mMessage = findPO(ctx, element);
if (mMessage == null) { if (mMessage == null) {
String value = getStringValue(element, "Value"); String value = getStringValue(element, "Value");
int id = findIdByColumn(ctx, "AD_Message", "value", value); int id = findIdByColumn(ctx, "AD_Message", "value", value);
mMessage = new MMessage(ctx, id > 0 ? id : 0, getTrxName(ctx)); mMessage = new MMessage(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }
PoFiller filler = new PoFiller(ctx, mMessage, element, this); PoFiller filler = new PoFiller(ctx, mMessage, element, this);
List<String> excludes = defaultExcludeList(X_AD_Message.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Message.Table_Name);
@ -57,6 +57,7 @@ public class MessageElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -79,7 +80,7 @@ public class MessageElementHandler extends AbstractElementHandler {
} }
else{ else{
logImportDetail (ctx, impDetail, 0, mMessage.getValue(), mMessage.get_ID(),action); logImportDetail (ctx, impDetail, 0, mMessage.getValue(), mMessage.get_ID(),action);
throw new POSaveFailedException("Failed to save message."); throw new POSaveFailedException("Failed to save message " + mMessage.getValue());
} }
} }
} else { } else {
@ -88,24 +89,31 @@ public class MessageElementHandler extends AbstractElementHandler {
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Message_ID = Env.getContextAsInt(ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Message_ID); int AD_Message_ID = Env.getContextAsInt(ctx.ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Message_ID);
if (messages.contains(AD_Message_ID)) if (messages.contains(AD_Message_ID))
return; return;
messages.add(AD_Message_ID); messages.add(AD_Message_ID);
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
X_AD_Message m_Message = new X_AD_Message (ctx, AD_Message_ID, null); X_AD_Message m_Message = new X_AD_Message (ctx.ctx, AD_Message_ID, null);
if (ctx.packOut.getFromDate() != null) {
if (m_Message.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("","",I_AD_Message.Table_Name,atts); document.startElement("","",I_AD_Message.Table_Name,atts);
createMessageBinding(ctx,document,m_Message); createMessageBinding(ctx,document,m_Message);
document.endElement("","",I_AD_Message.Table_Name); document.endElement("","",I_AD_Message.Table_Name);
} }
private void createMessageBinding(Properties ctx, TransformerHandler document, X_AD_Message m_Message) private void createMessageBinding(PIPOContext ctx, TransformerHandler document, X_AD_Message m_Message)
{ {
PoExporter filler = new PoExporter(ctx, document, m_Message); PoExporter filler = new PoExporter(ctx, document, m_Message);
if (m_Message.getAD_Message_ID() <= PackOut.MAX_OFFICIAL_ID) if (m_Message.getAD_Message_ID() <= PackOut.MAX_OFFICIAL_ID)
@ -117,8 +125,8 @@ public class MessageElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_Message_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Message_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Message_ID); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Message_ID);
} }
} }

View File

@ -17,12 +17,12 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.PoFiller; import org.adempiere.pipo2.PoFiller;
@ -38,7 +38,7 @@ import org.xml.sax.helpers.AttributesImpl;
public class OrgRoleElementHandler extends AbstractElementHandler { public class OrgRoleElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_Role_OrgAccess.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Role_OrgAccess.Table_Name);
X_AD_Role_OrgAccess po = findPO(ctx, element); X_AD_Role_OrgAccess po = findPO(ctx, element);
@ -48,19 +48,25 @@ public class OrgRoleElementHandler extends AbstractElementHandler {
roleId = getParentId(element, I_AD_Role.Table_Name); roleId = getParentId(element, I_AD_Role.Table_Name);
} else { } else {
Element roleElement = element.properties.get("AD_Role_ID"); Element roleElement = element.properties.get("AD_Role_ID");
roleId = ReferenceUtils.resolveReference(ctx, roleElement, getTrxName(ctx)); roleId = ReferenceUtils.resolveReference(ctx.ctx, roleElement, getTrxName(ctx));
}
if (roleId <= 0) {
element.defer = true;
element.unresolved = "AD_Role_ID";
return;
} }
Element orgElement = element.properties.get("AD_Org_ID"); Element orgElement = element.properties.get("AD_Org_ID");
int orgId = ReferenceUtils.resolveReference(ctx, orgElement, getTrxName(ctx)); int orgId = ReferenceUtils.resolveReference(ctx.ctx, orgElement, getTrxName(ctx));
Query query = new Query(ctx, "AD_Role_OrgAccess", "AD_Role_ID=? and AD_Org_ID=?", getTrxName(ctx)); Query query = new Query(ctx.ctx, "AD_Role_OrgAccess", "AD_Role_ID=? and AD_Org_ID=?", getTrxName(ctx));
po = query.setParameters(new Object[]{roleId, orgId}) po = query.setParameters(new Object[]{roleId, orgId})
.setClient_ID() .setClient_ID()
.<X_AD_Role_OrgAccess>first(); .<X_AD_Role_OrgAccess>first();
if (po == null) { if (po == null) {
po = new X_AD_Role_OrgAccess(ctx, 0, getTrxName(ctx)); po = new X_AD_Role_OrgAccess(ctx.ctx, 0, getTrxName(ctx));
po.setAD_Org_ID(orgId); po.setAD_Org_ID(orgId);
po.setAD_Role_ID(roleId); po.setAD_Role_ID(roleId);
} }
@ -72,37 +78,46 @@ public class OrgRoleElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
po.saveEx(); po.saveEx();
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Org_ID = Env.getContextAsInt(ctx, "AD_Org_ID"); int AD_Org_ID = Env.getContextAsInt(ctx.ctx, "AD_Org_ID");
int AD_Role_ID = Env.getContextAsInt(ctx, X_AD_Role.COLUMNNAME_AD_Role_ID); int AD_Role_ID = Env.getContextAsInt(ctx.ctx, X_AD_Role.COLUMNNAME_AD_Role_ID);
Query query = new Query(ctx.ctx, "AD_Role_OrgAccess", "AD_Role_ID=? and AD_Org_ID=?", getTrxName(ctx));
X_AD_Role_OrgAccess po = query.setParameters(new Object[]{AD_Role_ID, AD_Org_ID}).<X_AD_Role_OrgAccess>first();
if (po != null) {
if (ctx.packOut.getFromDate() != null) {
if (po.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_Role_OrgAccess.Table_Name, atts); document.startElement("", "", I_AD_Role_OrgAccess.Table_Name, atts);
createOrgAccessBinding(ctx, document, AD_Org_ID, AD_Role_ID); createOrgAccessBinding(ctx, document, po);
document.endElement("", "", I_AD_Role_OrgAccess.Table_Name); document.endElement("", "", I_AD_Role_OrgAccess.Table_Name);
}
} }
private void createOrgAccessBinding(Properties ctx, TransformerHandler document, private void createOrgAccessBinding(PIPOContext ctx, TransformerHandler document,
int orgId, int roleId) { X_AD_Role_OrgAccess po) {
Query query = new Query(ctx, "AD_Role_OrgAccess", "AD_Role_ID=? and AD_Org_ID=?", getTrxName(ctx));
X_AD_Role_OrgAccess po = query.setParameters(new Object[]{roleId, orgId}).<X_AD_Role_OrgAccess>first();
PoExporter filler = new PoExporter(ctx, document, po); PoExporter filler = new PoExporter(ctx, document, po);
AttributesImpl orgRefAtts = new AttributesImpl(); AttributesImpl orgRefAtts = new AttributesImpl();
String orgReference = ReferenceUtils.getTableReference("AD_Org", "Name", orgId, orgRefAtts); String orgReference = ReferenceUtils.getTableReference("AD_Org", "Name", po.getAD_Org_ID(), orgRefAtts);
filler.addString("AD_Org_ID", orgReference, orgRefAtts); filler.addString("AD_Org_ID", orgReference, orgRefAtts);
AttributesImpl roleRefAtts = new AttributesImpl(); AttributesImpl roleRefAtts = new AttributesImpl();
String roleReference = ReferenceUtils.getTableReference("AD_Role", "Name", roleId, roleRefAtts); String roleReference = ReferenceUtils.getTableReference("AD_Role", "Name", po.getAD_Role_ID(), roleRefAtts);
filler.addString("AD_Role_ID", roleReference, roleRefAtts); filler.addString("AD_Role_ID", roleReference, roleRefAtts);
List<String> excludes = defaultExcludeList(X_AD_Role_OrgAccess.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Role_OrgAccess.Table_Name);

View File

@ -17,11 +17,11 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -38,21 +38,22 @@ import org.xml.sax.helpers.AttributesImpl;
public class PreferenceElementHandler extends AbstractElementHandler { public class PreferenceElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_Preference.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Preference.Table_Name);
MPreference mPreference = findPO(ctx, element); MPreference mPreference = findPO(ctx, element);
if (mPreference == null) { if (mPreference == null) {
mPreference = new MPreference(ctx, 0, getTrxName(ctx)); mPreference = new MPreference(ctx.ctx, 0, getTrxName(ctx));
PoFiller filler = new PoFiller(ctx, mPreference, element, this); PoFiller filler = new PoFiller(ctx, mPreference, element, this);
List<String> notFounds = filler.autoFill(excludes); List<String> notFounds = filler.autoFill(excludes);
if (notFounds.size() > 0) { if (notFounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notFounds.toString();
return; return;
} }
Query query = new Query(ctx, "AD_Preference", "Attribute = ? AND coalesce(AD_User_ID,0) = ? AND coalesce(AD_Window_ID,0) = ?", getTrxName(ctx)); Query query = new Query(ctx.ctx, "AD_Preference", "Attribute = ? AND coalesce(AD_User_ID,0) = ? AND coalesce(AD_Window_ID,0) = ?", getTrxName(ctx));
MPreference tmp = query MPreference tmp = query
.setParameters(new Object[]{mPreference.getAttribute(), mPreference.getAD_User_ID(), mPreference.getAD_Window_ID()}) .setParameters(new Object[]{mPreference.getAttribute(), mPreference.getAD_User_ID(), mPreference.getAD_Window_ID()})
.first(); .first();
@ -61,6 +62,7 @@ public class PreferenceElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
mPreference = tmp; mPreference = tmp;
@ -70,6 +72,7 @@ public class PreferenceElementHandler extends AbstractElementHandler {
List<String> notFounds = filler.autoFill(excludes); List<String> notFounds = filler.autoFill(excludes);
if (notFounds.size() > 0) { if (notFounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notFounds.toString();
return; return;
} }
} }
@ -94,28 +97,35 @@ public class PreferenceElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, mPreference.getAttribute(), logImportDetail(ctx, impDetail, 0, mPreference.getAttribute(),
mPreference.get_ID(), action); mPreference.get_ID(), action);
throw new POSaveFailedException("Failed to save Preference"); throw new POSaveFailedException("Failed to save Preference " + mPreference.getAttribute());
} }
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Preference_ID = Env.getContextAsInt(ctx, int AD_Preference_ID = Env.getContextAsInt(ctx.ctx,
X_AD_Preference.COLUMNNAME_AD_Preference_ID); X_AD_Preference.COLUMNNAME_AD_Preference_ID);
X_AD_Preference m_Preference = new X_AD_Preference(ctx, X_AD_Preference m_Preference = new X_AD_Preference(ctx.ctx,
AD_Preference_ID, getTrxName(ctx)); AD_Preference_ID, getTrxName(ctx));
if (ctx.packOut.getFromDate() != null) {
if (m_Preference.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_Preference.Table_Name, atts); document.startElement("", "", X_AD_Preference.Table_Name, atts);
createPreferenceBinding(ctx, document, m_Preference); createPreferenceBinding(ctx, document, m_Preference);
document.endElement("", "", I_AD_Preference.Table_Name); document.endElement("", "", I_AD_Preference.Table_Name);
} }
private void createPreferenceBinding(Properties ctx, TransformerHandler document, private void createPreferenceBinding(PIPOContext ctx, TransformerHandler document,
X_AD_Preference m_Preference) { X_AD_Preference m_Preference) {
PoExporter filler = new PoExporter(ctx, document, m_Preference); PoExporter filler = new PoExporter(ctx, document, m_Preference);
List<String> excludes = defaultExcludeList(X_AD_Preference.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Preference.Table_Name);
@ -130,9 +140,9 @@ public class PreferenceElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
Env.setContext(packout.getCtx(), I_AD_Preference.COLUMNNAME_AD_Preference_ID, recordId); Env.setContext(packout.getCtx().ctx, I_AD_Preference.COLUMNNAME_AD_Preference_ID, recordId);
create(packout.getCtx(), packoutHandler); create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(I_AD_Preference.COLUMNNAME_AD_Preference_ID); packout.getCtx().ctx.remove(I_AD_Preference.COLUMNNAME_AD_Preference_ID);
} }
} }

View File

@ -21,24 +21,26 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.exceptions.DBException; import org.adempiere.exceptions.DBException;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
import org.adempiere.pipo2.PoFiller; import org.adempiere.pipo2.PoFiller;
import org.adempiere.pipo2.exception.POSaveFailedException; import org.adempiere.pipo2.exception.POSaveFailedException;
import org.compiere.model.I_AD_PrintFormat; import org.compiere.model.I_AD_PrintFormat;
import org.compiere.model.I_AD_PrintFormatItem;
import org.compiere.model.I_AD_PrintPaper; import org.compiere.model.I_AD_PrintPaper;
import org.compiere.model.I_AD_Table;
import org.compiere.model.X_AD_Package_Exp_Detail; import org.compiere.model.X_AD_Package_Exp_Detail;
import org.compiere.model.X_AD_Package_Imp_Detail; import org.compiere.model.X_AD_Package_Imp_Detail;
import org.compiere.model.X_AD_PrintFormat; import org.compiere.model.X_AD_PrintFormat;
import org.compiere.model.X_AD_PrintFormatItem; import org.compiere.model.X_AD_PrintFormatItem;
import org.compiere.print.MPrintFormat;
import org.compiere.print.MPrintFormatItem;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
@ -48,14 +50,14 @@ public class PrintFormatElementHandler extends AbstractElementHandler {
private List<Integer> formats = new ArrayList<Integer>(); private List<Integer> formats = new ArrayList<Integer>();
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
X_AD_PrintFormat mPrintFormat = findPO(ctx, element); X_AD_PrintFormat mPrintFormat = findPO(ctx, element);
if (mPrintFormat == null) { if (mPrintFormat == null) {
String name = getStringValue(element, "Name"); String name = getStringValue(element, "Name");
int id = findIdByColumn(ctx, "AD_PrintFormat", "Name", name); int id = findIdByColumn(ctx, "AD_PrintFormat", "Name", name);
mPrintFormat = new X_AD_PrintFormat(ctx, id > 0 ? id : 0, getTrxName(ctx)); mPrintFormat = new X_AD_PrintFormat(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }
PoFiller filler = new PoFiller(ctx, mPrintFormat, element, this); PoFiller filler = new PoFiller(ctx, mPrintFormat, element, this);
List<String> excludes = defaultExcludeList(X_AD_PrintFormat.Table_Name); List<String> excludes = defaultExcludeList(X_AD_PrintFormat.Table_Name);
@ -65,6 +67,7 @@ public class PrintFormatElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -85,17 +88,17 @@ public class PrintFormatElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, mPrintFormat.getName(), logImportDetail(ctx, impDetail, 0, mPrintFormat.getName(),
mPrintFormat.get_ID(), action); mPrintFormat.get_ID(), action);
throw new POSaveFailedException("Failed to save Print Format"); throw new POSaveFailedException("Failed to save Print Format " + mPrintFormat.getName());
} }
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_PrintFormat_ID = Env.getContextAsInt(ctx, int AD_PrintFormat_ID = Env.getContextAsInt(ctx.ctx,
X_AD_Package_Exp_Detail.COLUMNNAME_AD_PrintFormat_ID); X_AD_Package_Exp_Detail.COLUMNNAME_AD_PrintFormat_ID);
if (formats.contains(AD_PrintFormat_ID)) if (formats.contains(AD_PrintFormat_ID))
@ -103,17 +106,48 @@ public class PrintFormatElementHandler extends AbstractElementHandler {
formats.add(AD_PrintFormat_ID); formats.add(AD_PrintFormat_ID);
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
X_AD_PrintFormat m_Printformat = new X_AD_PrintFormat(ctx, AD_PrintFormat_ID, null); MPrintFormat m_Printformat = new MPrintFormat(ctx.ctx, AD_PrintFormat_ID, null);
if (m_Printformat.getAD_PrintPaper_ID() > 0) { if (m_Printformat.getAD_PrintPaper_ID() > 0) {
try { try {
getPackOut(ctx).getHandler(I_AD_PrintPaper.Table_Name).packOut(getPackOut(ctx), document, getLogDocument(ctx), m_Printformat.getAD_PrintPaper_ID()); ctx.packOut.getHandler(I_AD_PrintPaper.Table_Name).packOut(ctx.packOut, document, ctx.logDocument, m_Printformat.getAD_PrintPaper_ID());
} catch (Exception e) { } catch (Exception e) {
throw new SAXException(e); throw new SAXException(e);
} }
} }
if (m_Printformat.getAD_Client_ID() == 0 && m_Printformat.getAD_Table_ID() > 0) {
try {
ctx.packOut.getHandler(I_AD_Table.Table_Name).packOut(ctx.packOut, document, ctx.logDocument, m_Printformat.getAD_Table_ID());
} catch (Exception e) {
throw new SAXException(e);
}
}
boolean createElement = true;
if (ctx.packOut.getFromDate() != null) {
if (m_Printformat.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
createElement = false;
}
}
int size = m_Printformat.getItemCount();
for(int i = 0; i < size; i++) {
MPrintFormatItem item = m_Printformat.getItem(i);
if (item.getAD_PrintFormatChild_ID() > 0)
{
try {
this.packOut(ctx.packOut, document, null, item.getAD_PrintFormatChild_ID());
} catch (Exception e) {
throw new SAXException(e);
}
}
}
if (createElement) {
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_PrintFormat.Table_Name, atts); document.startElement("", "", I_AD_PrintFormat.Table_Name, atts);
createPrintFormatBinding(ctx, document, m_Printformat); createPrintFormatBinding(ctx, document, m_Printformat);
}
String sql = "SELECT AD_PrintFormatItem_ID FROM AD_PrintFormatItem WHERE AD_PrintFormat_ID= " String sql = "SELECT AD_PrintFormatItem_ID FROM AD_PrintFormatItem WHERE AD_PrintFormat_ID= "
+ m_Printformat.getAD_PrintFormat_ID() + m_Printformat.getAD_PrintFormat_ID()
@ -131,21 +165,23 @@ public class PrintFormatElementHandler extends AbstractElementHandler {
} finally { } finally {
DB.close(rs, pstmt); DB.close(rs, pstmt);
} }
document.endElement("", "", I_AD_PrintFormat.Table_Name);
if (createElement) {
document.endElement("", "", X_AD_PrintFormat.Table_Name);
}
} }
private void createItem(Properties ctx, TransformerHandler document, private void createItem(PIPOContext ctx, TransformerHandler document,
int AD_PrintFormatItem_ID) throws SAXException { int AD_PrintFormatItem_ID) throws SAXException {
try { try {
getPackOut(ctx).getHandler(I_AD_PrintFormatItem.Table_Name).packOut(getPackOut(ctx), document, getLogDocument(ctx), AD_PrintFormatItem_ID); ctx.packOut.getHandler(X_AD_PrintFormatItem.Table_Name).packOut(ctx.packOut, document, ctx.logDocument, AD_PrintFormatItem_ID);
} catch (Exception e) { } catch (Exception e) {
throw new SAXException(e); throw new SAXException(e);
} }
} }
private void createPrintFormatBinding(Properties ctx, TransformerHandler document, private void createPrintFormatBinding(PIPOContext ctx, TransformerHandler document,
X_AD_PrintFormat m_Printformat) { MPrintFormat m_Printformat) {
PoExporter filler = new PoExporter(ctx, document, m_Printformat); PoExporter filler = new PoExporter(ctx, document, m_Printformat);
List<String> excludes = defaultExcludeList(X_AD_PrintFormat.Table_Name); List<String> excludes = defaultExcludeList(X_AD_PrintFormat.Table_Name);
@ -158,9 +194,9 @@ public class PrintFormatElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_PrintFormat_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_PrintFormat_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_PrintFormat_ID); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_PrintFormat_ID);
} }
} }

View File

@ -18,11 +18,11 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -39,7 +39,7 @@ import org.xml.sax.helpers.AttributesImpl;
public class PrintFormatItemElementHandler extends AbstractElementHandler { public class PrintFormatItemElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_PrintFormatItem.Table_Name); List<String> excludes = defaultExcludeList(X_AD_PrintFormatItem.Table_Name);
@ -56,16 +56,17 @@ public class PrintFormatItemElementHandler extends AbstractElementHandler {
parentId = getParentId(element, I_AD_PrintFormatItem.Table_Name); parentId = getParentId(element, I_AD_PrintFormatItem.Table_Name);
} else { } else {
Element pfElement = element.properties.get(I_AD_PrintFormatItem.COLUMNNAME_AD_PrintFormat_ID); Element pfElement = element.properties.get(I_AD_PrintFormatItem.COLUMNNAME_AD_PrintFormat_ID);
parentId = ReferenceUtils.resolveReference(ctx, pfElement, getTrxName(ctx)); parentId = ReferenceUtils.resolveReference(ctx.ctx, pfElement, getTrxName(ctx));
} }
if (parentId <= 0) { if (parentId <= 0) {
element.defer = true; element.defer = true;
element.unresolved = "AD_PrintFormat_ID";
return; return;
} }
String name = getStringValue(element, "Name"); String name = getStringValue(element, "Name");
int id = findIdByNameAndParentId(ctx, "AD_PrintFormatItem", name, "AD_PrintFormat", parentId); int id = findIdByNameAndParentId(ctx, "AD_PrintFormatItem", name, "AD_PrintFormat", parentId);
mPrintFormatItem = new X_AD_PrintFormatItem(ctx, id > 0 ? id : 0, getTrxName(ctx)); mPrintFormatItem = new X_AD_PrintFormatItem(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mPrintFormatItem.setAD_PrintFormat_ID(parentId); mPrintFormatItem.setAD_PrintFormat_ID(parentId);
excludes.add(I_AD_PrintFormatItem.COLUMNNAME_AD_PrintFormat_ID); excludes.add(I_AD_PrintFormatItem.COLUMNNAME_AD_PrintFormat_ID);
} }
@ -79,10 +80,10 @@ public class PrintFormatItemElementHandler extends AbstractElementHandler {
int columnId = 0; int columnId = 0;
Element columnElement = element.properties.get("AD_Column_ID"); Element columnElement = element.properties.get("AD_Column_ID");
if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement)) { if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement)) {
columnId = ReferenceUtils.resolveReference(ctx, columnElement, getTrxName(ctx)); columnId = ReferenceUtils.resolveReference(ctx.ctx, columnElement, getTrxName(ctx));
} else { } else {
Element tableElement = element.properties.get("AD_Table_ID"); Element tableElement = element.properties.get("AD_Table_ID");
int tableId = ReferenceUtils.resolveReference(ctx, tableElement, getTrxName(ctx)); int tableId = ReferenceUtils.resolveReference(ctx.ctx, tableElement, getTrxName(ctx));
String columnName = getStringValue(element, "AD_Column_ID"); String columnName = getStringValue(element, "AD_Column_ID");
columnId = findIdByColumnAndParentId(ctx, "AD_Column", "ColumnName", columnName, columnId = findIdByColumnAndParentId(ctx, "AD_Column", "ColumnName", columnName,
"AD_Table", tableId); "AD_Table", tableId);
@ -92,7 +93,7 @@ public class PrintFormatItemElementHandler extends AbstractElementHandler {
excludes.add("AD_PrintFormatChild_ID"); excludes.add("AD_PrintFormatChild_ID");
Element pfchildElement = element.properties.get(I_AD_PrintFormatItem.COLUMNNAME_AD_PrintFormatChild_ID); Element pfchildElement = element.properties.get(I_AD_PrintFormatItem.COLUMNNAME_AD_PrintFormatChild_ID);
int AD_PrintFormatChild_ID = ReferenceUtils.resolveReference(ctx, pfchildElement, getTrxName(ctx)); int AD_PrintFormatChild_ID = ReferenceUtils.resolveReference(ctx.ctx, pfchildElement, getTrxName(ctx));
if (AD_PrintFormatChild_ID > 0) { if (AD_PrintFormatChild_ID > 0) {
mPrintFormatItem.setAD_PrintFormatChild_ID(AD_PrintFormatChild_ID); mPrintFormatItem.setAD_PrintFormatChild_ID(AD_PrintFormatChild_ID);
} else if (pfchildElement.contents != null && pfchildElement.contents.length() > 0) { } else if (pfchildElement.contents != null && pfchildElement.contents.length() > 0) {
@ -105,6 +106,7 @@ public class PrintFormatItemElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -124,20 +126,27 @@ public class PrintFormatItemElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, mPrintFormatItem.getName(), logImportDetail(ctx, impDetail, 0, mPrintFormatItem.getName(),
mPrintFormatItem.get_ID(), action); mPrintFormatItem.get_ID(), action);
throw new POSaveFailedException("PrintFormatItem"); throw new POSaveFailedException("Failed to save PrintFormatItem " + mPrintFormatItem.getName());
} }
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_PrintFormatItem_ID = Env.getContextAsInt(ctx, int AD_PrintFormatItem_ID = Env.getContextAsInt(ctx.ctx,
X_AD_PrintFormatItem.COLUMNNAME_AD_PrintFormatItem_ID); X_AD_PrintFormatItem.COLUMNNAME_AD_PrintFormatItem_ID);
X_AD_PrintFormatItem m_PrintFormatItem = new X_AD_PrintFormatItem(ctx, X_AD_PrintFormatItem m_PrintFormatItem = new X_AD_PrintFormatItem(ctx.ctx,
AD_PrintFormatItem_ID, null); AD_PrintFormatItem_ID, null);
if (ctx.packOut.getFromDate() != null) {
if (m_PrintFormatItem.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_PrintFormatItem.Table_Name, atts); document.startElement("", "", I_AD_PrintFormatItem.Table_Name, atts);
@ -145,7 +154,7 @@ public class PrintFormatItemElementHandler extends AbstractElementHandler {
document.endElement("", "", I_AD_PrintFormatItem.Table_Name); document.endElement("", "", I_AD_PrintFormatItem.Table_Name);
} }
private void createPrintFormatItemBinding(Properties ctx, TransformerHandler document, private void createPrintFormatItemBinding(PIPOContext ctx, TransformerHandler document,
X_AD_PrintFormatItem mPrintformatItem) { X_AD_PrintFormatItem mPrintformatItem) {
PoExporter filler = new PoExporter(ctx, document, mPrintformatItem); PoExporter filler = new PoExporter(ctx, document, mPrintformatItem);
@ -154,12 +163,11 @@ public class PrintFormatItemElementHandler extends AbstractElementHandler {
if (mPrintformatItem.getAD_PrintFormatItem_ID() <= PackOut.MAX_OFFICIAL_ID) if (mPrintformatItem.getAD_PrintFormatItem_ID() <= PackOut.MAX_OFFICIAL_ID)
filler.add("AD_PrintFormatItem_ID", new AttributesImpl()); filler.add("AD_PrintFormatItem_ID", new AttributesImpl());
if (mPrintformatItem.getAD_Column_ID() > 0) { if (mPrintformatItem.getAD_Client_ID() == 0 && mPrintformatItem.getAD_Column_ID() > 0) {
String sql = "SELECT AD_Table_ID FROM AD_Column WHERE AD_Column_ID=?"; String sql = "SELECT AD_Table_ID FROM AD_Column WHERE AD_Column_ID=?";
int tableID = DB.getSQLValue(null, sql, mPrintformatItem.getAD_Column_ID()); int tableID = DB.getSQLValue(null, sql, mPrintformatItem.getAD_Column_ID());
AttributesImpl referenceAtts = new AttributesImpl(); AttributesImpl referenceAtts = new AttributesImpl();
String value = ReferenceUtils.getTableReference("AD_Table", "TableName", tableID, referenceAtts); filler.addTableReference("AD_Table_ID", "AD_Table", "TableName", tableID, referenceAtts);
filler.addString("AD_Table.TableName", value, referenceAtts);
} }
filler.export(excludes); filler.export(excludes);
@ -169,9 +177,9 @@ public class PrintFormatItemElementHandler extends AbstractElementHandler {
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
Env.setContext(packout.getCtx(), X_AD_PrintFormatItem.COLUMNNAME_AD_PrintFormatItem_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_PrintFormatItem.COLUMNNAME_AD_PrintFormatItem_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_PrintFormatItem.COLUMNNAME_AD_PrintFormatItem_ID); packout.getCtx().ctx.remove(X_AD_PrintFormatItem.COLUMNNAME_AD_PrintFormatItem_ID);
} }
} }

View File

@ -18,11 +18,11 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -37,7 +37,7 @@ import org.xml.sax.helpers.AttributesImpl;
public class PrintPaperElementHandler extends AbstractElementHandler { public class PrintPaperElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_PrintPaper.Table_Name); List<String> excludes = defaultExcludeList(X_AD_PrintPaper.Table_Name);
@ -48,7 +48,7 @@ public class PrintPaperElementHandler extends AbstractElementHandler {
String printPaperName = getStringValue(element, "Name", excludes); String printPaperName = getStringValue(element, "Name", excludes);
int id = findIdByName(ctx, "AD_PrintPaper", printPaperName); int id = findIdByName(ctx, "AD_PrintPaper", printPaperName);
printPaper = new X_AD_PrintPaper(ctx, id > 0 ? id : 0, getTrxName(ctx)); printPaper = new X_AD_PrintPaper(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }
PoFiller filler = new PoFiller(ctx, printPaper, element, this); PoFiller filler = new PoFiller(ctx, printPaper, element, this);
@ -58,6 +58,7 @@ public class PrintPaperElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -76,20 +77,27 @@ public class PrintPaperElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, printPaper.getName(), logImportDetail(ctx, impDetail, 0, printPaper.getName(),
printPaper.get_ID(), action); printPaper.get_ID(), action);
throw new POSaveFailedException("PrintPaper"); throw new POSaveFailedException("Failed to save PrintPaper " + printPaper.getName());
} }
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_PrintPaper_ID = Env.getContextAsInt(ctx, int AD_PrintPaper_ID = Env.getContextAsInt(ctx.ctx,
X_AD_PrintPaper.COLUMNNAME_AD_PrintPaper_ID); X_AD_PrintPaper.COLUMNNAME_AD_PrintPaper_ID);
X_AD_PrintPaper printPaper = new X_AD_PrintPaper(ctx, X_AD_PrintPaper printPaper = new X_AD_PrintPaper(ctx.ctx,
AD_PrintPaper_ID, null); AD_PrintPaper_ID, null);
if (ctx.packOut.getFromDate() != null) {
if (printPaper.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_PrintPaper.Table_Name, atts); document.startElement("", "", I_AD_PrintPaper.Table_Name, atts);
@ -97,7 +105,7 @@ public class PrintPaperElementHandler extends AbstractElementHandler {
document.endElement("", "", I_AD_PrintPaper.Table_Name); document.endElement("", "", I_AD_PrintPaper.Table_Name);
} }
private void createPrintPaperBinding(Properties ctx, TransformerHandler document, private void createPrintPaperBinding(PIPOContext ctx, TransformerHandler document,
X_AD_PrintPaper printPaper) { X_AD_PrintPaper printPaper) {
PoExporter filler = new PoExporter(ctx, document, printPaper); PoExporter filler = new PoExporter(ctx, document, printPaper);
@ -112,9 +120,9 @@ public class PrintPaperElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
Env.setContext(packout.getCtx(), X_AD_PrintPaper.COLUMNNAME_AD_PrintPaper_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_PrintPaper.COLUMNNAME_AD_PrintPaper_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_PrintPaper.COLUMNNAME_AD_PrintPaper_ID); packout.getCtx().ctx.remove(X_AD_PrintPaper.COLUMNNAME_AD_PrintPaper_ID);
} }
} }

View File

@ -17,11 +17,11 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
@ -39,7 +39,7 @@ import org.xml.sax.helpers.AttributesImpl;
public class ProcessAccessElementHandler extends AbstractElementHandler { public class ProcessAccessElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
int roleid =0; int roleid =0;
int processid =0; int processid =0;
List<String> excludes = defaultExcludeList(X_AD_Process_Access.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Process_Access.Table_Name);
@ -49,18 +49,29 @@ public class ProcessAccessElementHandler extends AbstractElementHandler {
if (getParentId(element, I_AD_Role.Table_Name) > 0) { if (getParentId(element, I_AD_Role.Table_Name) > 0) {
roleid = getParentId(element, I_AD_Role.Table_Name); roleid = getParentId(element, I_AD_Role.Table_Name);
} else { } else {
Element roleElement = element.properties.get(I_AD_Process_Access.COLUMNNAME_AD_Role_ID); Element roleElement = element.properties.get("AD_Role_ID");
roleid = ReferenceUtils.resolveReference(ctx, roleElement, getTrxName(ctx)); roleid = ReferenceUtils.resolveReference(ctx.ctx, roleElement, getTrxName(ctx));
}
if (roleid <= 0) {
element.defer = true;
element.unresolved = "AD_Role_ID";
return;
} }
Element processElement = element.properties.get(I_AD_Process_Access.COLUMNNAME_AD_Process_ID); Element processElement = element.properties.get(I_AD_Process_Access.COLUMNNAME_AD_Process_ID);
processid = ReferenceUtils.resolveReference(ctx, processElement, getTrxName(ctx)); processid = ReferenceUtils.resolveReference(ctx.ctx, processElement, getTrxName(ctx));
if (processid <= 0) {
element.defer = true;
element.unresolved = "AD_Process_ID " + (processElement.contents != null ? processElement.contents.toString() : "");
return;
}
Query query = new Query(ctx, "AD_Process_Access", "AD_Role_ID=? and AD_Process_ID=?", getTrxName(ctx)); Query query = new Query(ctx.ctx, "AD_Process_Access", "AD_Role_ID=? and AD_Process_ID=?", getTrxName(ctx));
po = query.setParameters(new Object[]{roleid, processid}).first(); po = query.setParameters(new Object[]{roleid, processid}).first();
if (po == null) if (po == null)
{ {
po = new X_AD_Process_Access(ctx, 0, getTrxName(ctx)); po = new X_AD_Process_Access(ctx.ctx, 0, getTrxName(ctx));
po.setAD_Process_ID(processid); po.setAD_Process_ID(processid);
po.setAD_Role_ID(roleid); po.setAD_Role_ID(roleid);
} }
@ -71,38 +82,46 @@ public class ProcessAccessElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
po.saveEx(); po.saveEx();
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Process_ID = Env.getContextAsInt(ctx, X_AD_Process.COLUMNNAME_AD_Process_ID); int AD_Process_ID = Env.getContextAsInt(ctx.ctx, X_AD_Process.COLUMNNAME_AD_Process_ID);
int AD_Role_ID = Env.getContextAsInt(ctx, X_AD_Role.COLUMNNAME_AD_Role_ID); int AD_Role_ID = Env.getContextAsInt(ctx.ctx, X_AD_Role.COLUMNNAME_AD_Role_ID);
X_AD_Process_Access po = null;
Query query = new Query(ctx.ctx, "AD_Process_Access", "AD_Role_ID=? and AD_Process_ID=?", getTrxName(ctx));
po = query.setParameters(new Object[]{AD_Role_ID, AD_Process_ID}).first();
if (po != null) {
if (ctx.packOut.getFromDate() != null) {
if (po.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_Process_Access.Table_Name, atts); document.startElement("", "", I_AD_Process_Access.Table_Name, atts);
createProcessAccessBinding(ctx, document, AD_Process_ID, AD_Role_ID); createProcessAccessBinding(ctx, document, po);
document.endElement("", "", I_AD_Process_Access.Table_Name); document.endElement("", "", I_AD_Process_Access.Table_Name);
} }
}
private void createProcessAccessBinding(Properties ctx, TransformerHandler document, private void createProcessAccessBinding(PIPOContext ctx, TransformerHandler document,
int process_id, int role_id) { X_AD_Process_Access po) {
X_AD_Process_Access po = null;
Query query = new Query(ctx, "AD_Process_Access", "AD_Role_ID=? and AD_Process_ID=?", getTrxName(ctx));
po = query.setParameters(new Object[]{role_id, process_id}).first();
if (po != null)
{
PoExporter filler = new PoExporter(ctx, document, po); PoExporter filler = new PoExporter(ctx, document, po);
List<String> excludes = defaultExcludeList(X_AD_Process_Access.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Process_Access.Table_Name);
filler.export(excludes); filler.export(excludes);
} }
}
@Override @Override
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,

View File

@ -18,13 +18,13 @@ package org.adempiere.pipo2.handler;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.exceptions.AdempiereException; import org.adempiere.exceptions.AdempiereException;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.ElementHandler; import org.adempiere.pipo2.ElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -51,17 +51,17 @@ public class ProcessElementHandler extends AbstractElementHandler {
private List<Integer> processes = new ArrayList<Integer>(); private List<Integer> processes = new ArrayList<Integer>();
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
X_AD_Process mProcess = findPO(ctx, element); X_AD_Process mProcess = findPO(ctx, element);
if (mProcess == null) { if (mProcess == null) {
String value = getStringValue(element, "Value"); String value = getStringValue(element, "Value");
// Get New process. // Get New process.
int id = findIdByColumn(ctx, "AD_Process", "Value", value); int id = findIdByColumn(ctx, "AD_Process", "Value", value);
mProcess = new X_AD_Process(ctx, id > 0 ? id : 0, getTrxName(ctx)); mProcess = new X_AD_Process(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }
if (mProcess.getAD_Process_ID() == 0 && isOfficialId(element, "AD_Process_ID")) if (mProcess.getAD_Process_ID() == 0 && isOfficialId(element, "AD_Process_ID"))
@ -73,6 +73,7 @@ public class ProcessElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -94,7 +95,7 @@ public class ProcessElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, mProcess.getName(), mProcess logImportDetail(ctx, impDetail, 0, mProcess.getName(), mProcess
.get_ID(), action); .get_ID(), action);
throw new POSaveFailedException("Process"); throw new POSaveFailedException("Failed to save Process " + mProcess.getName());
} }
} }
} else { } else {
@ -102,18 +103,18 @@ public class ProcessElementHandler extends AbstractElementHandler {
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Process_ID = Env.getContextAsInt(ctx, "AD_Process_ID"); int AD_Process_ID = Env.getContextAsInt(ctx.ctx, "AD_Process_ID");
if (processes.contains(AD_Process_ID)) if (processes.contains(AD_Process_ID))
return; return;
processes.add(AD_Process_ID); processes.add(AD_Process_ID);
PackOut packOut = getPackOut(ctx); PackOut packOut = ctx.packOut;
X_AD_Process m_Process = new X_AD_Process(ctx, AD_Process_ID, getTrxName(ctx)); X_AD_Process m_Process = new X_AD_Process(ctx.ctx, AD_Process_ID, getTrxName(ctx));
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
@ -132,11 +133,22 @@ public class ProcessElementHandler extends AbstractElementHandler {
ElementHandler handler = packOut.getHandler(I_AD_Workflow.Table_Name); ElementHandler handler = packOut.getHandler(I_AD_Workflow.Table_Name);
handler.packOut(packOut,document,null,m_Process.getAD_Workflow_ID()); handler.packOut(packOut,document,null,m_Process.getAD_Workflow_ID());
} }
boolean createElement = true;
if (ctx.packOut.getFromDate() != null) {
if (m_Process.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
createElement = false;
}
}
if (createElement) {
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_Process.Table_Name, atts); document.startElement("", "", I_AD_Process.Table_Name, atts);
createProcessBinding(ctx, document, m_Process); createProcessBinding(ctx, document, m_Process);
}
Query query = new Query(ctx, "AD_Process_PARA", "AD_Process_ID = ?", getTrxName(ctx)); Query query = new Query(ctx.ctx, "AD_Process_PARA", "AD_Process_ID = ?", getTrxName(ctx));
List<X_AD_Process_Para> paralist = query.setParameters(new Object[]{AD_Process_ID}).list(); List<X_AD_Process_Para> paralist = query.setParameters(new Object[]{AD_Process_ID}).list();
for (X_AD_Process_Para para : paralist) { for (X_AD_Process_Para para : paralist) {
if (para.getAD_Reference_ID()>0) if (para.getAD_Reference_ID()>0)
@ -160,22 +172,24 @@ public class ProcessElementHandler extends AbstractElementHandler {
createProcessPara(ctx, document, para.getAD_Process_Para_ID()); createProcessPara(ctx, document, para.getAD_Process_Para_ID());
} }
document.endElement("", "", I_AD_Process.Table_Name); if (createElement) {
document.endElement("", "", X_AD_Process.Table_Name);
}
} catch (Exception e) { } catch (Exception e) {
throw new AdempiereException(e); throw new AdempiereException(e);
} }
} }
private void createProcessPara(Properties ctx, TransformerHandler document, private void createProcessPara(PIPOContext ctx, TransformerHandler document,
int AD_Process_Para_ID) throws SAXException { int AD_Process_Para_ID) throws SAXException {
Env.setContext(ctx, X_AD_Process_Para.COLUMNNAME_AD_Process_Para_ID, Env.setContext(ctx.ctx, X_AD_Process_Para.COLUMNNAME_AD_Process_Para_ID,
AD_Process_Para_ID); AD_Process_Para_ID);
paraHandler.create(ctx, document); paraHandler.create(ctx, document);
ctx.remove(X_AD_Process_Para.COLUMNNAME_AD_Process_Para_ID); ctx.ctx.remove(X_AD_Process_Para.COLUMNNAME_AD_Process_Para_ID);
} }
private void createProcessBinding(Properties ctx, TransformerHandler document, private void createProcessBinding(PIPOContext ctx, TransformerHandler document,
X_AD_Process m_Process) { X_AD_Process m_Process) {
PoExporter filler = new PoExporter(ctx, document, m_Process); PoExporter filler = new PoExporter(ctx, document, m_Process);
List<String> excludes = defaultExcludeList(X_AD_Process.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Process.Table_Name);
@ -188,8 +202,8 @@ public class ProcessElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_Process_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Process_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Process_ID); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Process_ID);
} }
} }

View File

@ -17,13 +17,12 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.exceptions.AdempiereException;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.ElementHandler; import org.adempiere.pipo2.ElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -41,12 +40,12 @@ import org.xml.sax.helpers.AttributesImpl;
public class ProcessParaElementHandler extends AbstractElementHandler { public class ProcessParaElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_Process_Para.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Process_Para.Table_Name);
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
if (isParentDefer(element, I_AD_Process.Table_Name)) { if (isParentDefer(element, I_AD_Process.Table_Name)) {
element.defer = true; element.defer = true;
return; return;
@ -54,15 +53,15 @@ public class ProcessParaElementHandler extends AbstractElementHandler {
X_AD_Process_Para mProcessPara = findPO(ctx, element); X_AD_Process_Para mProcessPara = findPO(ctx, element);
if (mProcessPara == null) { if (mProcessPara == null) {
String name = getStringValue(element, "Name"); String name = getStringValue(element, "ColumnName");
int id = 0; int id = 0;
int masterId = 0; int masterId = 0;
if (getParentId(element, I_AD_Process.Table_Name) > 0) { if (getParentId(element, I_AD_Process.Table_Name) > 0) {
masterId = getParentId(element, "process"); masterId = getParentId(element, I_AD_Process.Table_Name);
} else { } else {
Element processElement = element.properties.get(I_AD_Process_Para.COLUMNNAME_AD_Process_ID); Element processElement = element.properties.get(I_AD_Process_Para.COLUMNNAME_AD_Process_ID);
masterId = ReferenceUtils.resolveReference(ctx, processElement, getTrxName(ctx)); masterId = ReferenceUtils.resolveReference(ctx.ctx, processElement, getTrxName(ctx));
} }
if (masterId <= 0) { if (masterId <= 0) {
element.defer = true; element.defer = true;
@ -70,8 +69,8 @@ public class ProcessParaElementHandler extends AbstractElementHandler {
return; return;
} }
id = findIdByColumnAndParentId(ctx, "AD_Process_Para", "Name", name, "AD_Process", masterId); id = findIdByColumnAndParentId(ctx, "AD_Process_Para", "ColumnName", name, "AD_Process", masterId);
mProcessPara = new X_AD_Process_Para(ctx, id > 0 ? id : 0, getTrxName(ctx)); mProcessPara = new X_AD_Process_Para(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mProcessPara.setAD_Process_ID(masterId); mProcessPara.setAD_Process_ID(masterId);
excludes.add(I_AD_Process_Para.COLUMNNAME_AD_Process_ID); excludes.add(I_AD_Process_Para.COLUMNNAME_AD_Process_ID);
} }
@ -84,6 +83,7 @@ public class ProcessParaElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -99,12 +99,12 @@ public class ProcessParaElementHandler extends AbstractElementHandler {
action = "New"; action = "New";
} }
if (mProcessPara.save(getTrxName(ctx)) == true) { if (mProcessPara.save(getTrxName(ctx)) == true) {
logImportDetail(ctx, impDetail, 1, mProcessPara.getName(), logImportDetail(ctx, impDetail, 1, mProcessPara.getColumnName(),
mProcessPara.get_ID(), action); mProcessPara.get_ID(), action);
} else { } else {
logImportDetail(ctx, impDetail, 0, mProcessPara.getName(), logImportDetail(ctx, impDetail, 0, mProcessPara.getColumnName(),
mProcessPara.get_ID(), action); mProcessPara.get_ID(), action);
throw new POSaveFailedException("ProcessPara"); throw new POSaveFailedException("Failed to save ProcessPara " + mProcessPara.getColumnName());
} }
} }
} else { } else {
@ -112,23 +112,29 @@ public class ProcessParaElementHandler extends AbstractElementHandler {
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Process_Para_ID = Env.getContextAsInt(ctx, int AD_Process_Para_ID = Env.getContextAsInt(ctx.ctx,
X_AD_Process_Para.COLUMNNAME_AD_Process_Para_ID); X_AD_Process_Para.COLUMNNAME_AD_Process_Para_ID);
X_AD_Process_Para m_Processpara = new X_AD_Process_Para(ctx, X_AD_Process_Para m_Processpara = new X_AD_Process_Para(ctx.ctx,
AD_Process_Para_ID, getTrxName(ctx)); AD_Process_Para_ID, getTrxName(ctx));
if (m_Processpara.getAD_Element_ID() > 0) { if (m_Processpara.getAD_Element_ID() > 0) {
PackOut packOut = getPackOut(ctx); PackOut packOut = ctx.packOut;
ElementHandler handler = packOut.getHandler(I_AD_Element.Table_Name); ElementHandler handler = packOut.getHandler(I_AD_Element.Table_Name);
try { try {
handler.packOut(packOut,document,null,m_Processpara.getAD_Element_ID()); handler.packOut(packOut,document,null,m_Processpara.getAD_Element_ID());
} catch (Exception e) { } catch (Exception e) {
throw new AdempiereException(e); throw new RuntimeException(e);
}
}
if (ctx.packOut.getFromDate() != null) {
if (m_Processpara.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
} }
} }
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
@ -138,7 +144,7 @@ public class ProcessParaElementHandler extends AbstractElementHandler {
document.endElement("", "", I_AD_Process_Para.Table_Name); document.endElement("", "", I_AD_Process_Para.Table_Name);
} }
private void createProcessParaBinding(Properties ctx, TransformerHandler document, private void createProcessParaBinding(PIPOContext ctx, TransformerHandler document,
X_AD_Process_Para m_Processpara) { X_AD_Process_Para m_Processpara) {
PoExporter filler = new PoExporter(ctx, document, m_Processpara); PoExporter filler = new PoExporter(ctx, document, m_Processpara);
@ -153,8 +159,8 @@ public class ProcessParaElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
Env.setContext(packout.getCtx(), I_AD_Process_Para.COLUMNNAME_AD_Process_Para_ID, recordId); Env.setContext(packout.getCtx().ctx, I_AD_Process_Para.COLUMNNAME_AD_Process_Para_ID, recordId);
create(packout.getCtx(), packoutHandler); create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(I_AD_Process_Para.COLUMNNAME_AD_Process_Para_ID); packout.getCtx().ctx.remove(I_AD_Process_Para.COLUMNNAME_AD_Process_Para_ID);
} }
} }

View File

@ -21,12 +21,12 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -51,17 +51,17 @@ public class ReferenceElementHandler extends AbstractElementHandler {
private List<Integer> references = new ArrayList<Integer>(); private List<Integer> references = new ArrayList<Integer>();
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
String name = getStringValue(element, "Name"); String name = getStringValue(element, "Name");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
X_AD_Reference mReference = findPO(ctx, element); X_AD_Reference mReference = findPO(ctx, element);
if (mReference == null) { if (mReference == null) {
int id = findIdByName(ctx, "AD_Reference", name); int id = findIdByName(ctx, "AD_Reference", name);
mReference = new X_AD_Reference(ctx, id > 0 ? id : 0, getTrxName(ctx)); mReference = new X_AD_Reference(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }
List<String> excludes = defaultExcludeList(X_AD_Reference.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Reference.Table_Name);
if (mReference.getAD_Reference_ID() == 0 && isOfficialId(element, "AD_Reference_ID")) if (mReference.getAD_Reference_ID() == 0 && isOfficialId(element, "AD_Reference_ID"))
@ -71,6 +71,7 @@ public class ReferenceElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -96,7 +97,7 @@ public class ReferenceElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, mReference.getName(), logImportDetail(ctx, impDetail, 0, mReference.getName(),
mReference.get_ID(), action); mReference.get_ID(), action);
throw new POSaveFailedException("Reference"); throw new POSaveFailedException("Failed to save Reference " + mReference.getName());
} }
} }
} else { } else {
@ -104,12 +105,12 @@ public class ReferenceElementHandler extends AbstractElementHandler {
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int Reference_id = Env.getContextAsInt(ctx, int Reference_id = Env.getContextAsInt(ctx.ctx,
X_AD_Reference.COLUMNNAME_AD_Reference_ID); X_AD_Reference.COLUMNNAME_AD_Reference_ID);
if (references.contains(Reference_id)) if (references.contains(Reference_id))
@ -118,11 +119,20 @@ public class ReferenceElementHandler extends AbstractElementHandler {
references.add(Reference_id); references.add(Reference_id);
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
X_AD_Reference m_Reference = new X_AD_Reference(ctx, Reference_id, getTrxName(ctx)); X_AD_Reference m_Reference = new X_AD_Reference(ctx.ctx, Reference_id, getTrxName(ctx));
boolean createElement = true;
if (ctx.packOut.getFromDate() != null) {
if (m_Reference.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
createElement = false;
}
}
if (createElement) {
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_Reference.Table_Name, atts); document.startElement("", "", I_AD_Reference.Table_Name, atts);
createReferenceBinding(ctx, document, m_Reference); createReferenceBinding(ctx, document, m_Reference);
}
if (m_Reference.getValidationType().compareTo("L") == 0) { if (m_Reference.getValidationType().compareTo("L") == 0) {
String sql1 = "SELECT AD_REF_LIST_ID FROM AD_Ref_List WHERE AD_Reference_ID= " String sql1 = "SELECT AD_REF_LIST_ID FROM AD_Ref_List WHERE AD_Reference_ID= "
@ -156,27 +166,29 @@ public class ReferenceElementHandler extends AbstractElementHandler {
} else if (m_Reference.getValidationType().compareTo("T") == 0) { } else if (m_Reference.getValidationType().compareTo("T") == 0) {
createReferenceTable(ctx, document, Reference_id); createReferenceTable(ctx, document, Reference_id);
} }
document.endElement("", "", I_AD_Reference.Table_Name);
if (createElement) {
document.endElement("", "", X_AD_Reference.Table_Name);
}
} }
private void createReferenceTable(Properties ctx, TransformerHandler document, private void createReferenceTable(PIPOContext ctx, TransformerHandler document,
int reference_id) throws SAXException { int reference_id) throws SAXException {
Env.setContext(ctx, X_AD_Ref_Table.COLUMNNAME_AD_Reference_ID, reference_id); Env.setContext(ctx.ctx, X_AD_Ref_Table.COLUMNNAME_AD_Reference_ID, reference_id);
tableHandler.create(ctx, document); tableHandler.create(ctx, document);
ctx.remove(X_AD_Ref_Table.COLUMNNAME_AD_Reference_ID); ctx.ctx.remove(X_AD_Ref_Table.COLUMNNAME_AD_Reference_ID);
} }
private void createReferenceList(Properties ctx, private void createReferenceList(PIPOContext ctx,
TransformerHandler document, int AD_Ref_List_ID) TransformerHandler document, int AD_Ref_List_ID)
throws SAXException { throws SAXException {
Env.setContext(ctx, X_AD_Ref_List.COLUMNNAME_AD_Ref_List_ID, Env.setContext(ctx.ctx, X_AD_Ref_List.COLUMNNAME_AD_Ref_List_ID,
AD_Ref_List_ID); AD_Ref_List_ID);
listHandler.create(ctx, document); listHandler.create(ctx, document);
ctx.remove(X_AD_Ref_List.COLUMNNAME_AD_Ref_List_ID); ctx.ctx.remove(X_AD_Ref_List.COLUMNNAME_AD_Ref_List_ID);
} }
private void createReferenceBinding(Properties ctx, TransformerHandler document, private void createReferenceBinding(PIPOContext ctx, TransformerHandler document,
X_AD_Reference m_Reference) { X_AD_Reference m_Reference) {
List<String> excludes = defaultExcludeList(X_AD_Reference.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Reference.Table_Name);
PoExporter filler = new PoExporter(ctx, document, m_Reference); PoExporter filler = new PoExporter(ctx, document, m_Reference);
@ -188,8 +200,8 @@ public class ReferenceElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_Reference_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Reference_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Reference_ID); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Reference_ID);
} }
} }

View File

@ -17,11 +17,11 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -38,15 +38,15 @@ import org.xml.sax.helpers.AttributesImpl;
public class ReferenceListElementHandler extends AbstractElementHandler { public class ReferenceListElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
if (isParentSkip(element, null)) { /*if (isParentSkip(element, null)) {
element.skip = true; element.skip = true;
return; return;
} }*/
X_AD_Ref_List mRefList = findPO(ctx, element); X_AD_Ref_List mRefList = findPO(ctx, element);
if (mRefList == null) { if (mRefList == null) {
@ -56,11 +56,11 @@ public class ReferenceListElementHandler extends AbstractElementHandler {
AD_Reference_ID = getParentId(element, I_AD_Reference.Table_Name); AD_Reference_ID = getParentId(element, I_AD_Reference.Table_Name);
} else { } else {
Element referenceElement = element.properties.get(I_AD_Ref_List.COLUMNNAME_AD_Reference_ID); Element referenceElement = element.properties.get(I_AD_Ref_List.COLUMNNAME_AD_Reference_ID);
AD_Reference_ID = ReferenceUtils.resolveReference(ctx, referenceElement, getTrxName(ctx)); AD_Reference_ID = ReferenceUtils.resolveReference(ctx.ctx, referenceElement, getTrxName(ctx));
} }
int AD_Ref_List_ID = findIdByColumnAndParentId(ctx, "AD_Ref_List", "Value", value, "AD_Reference", AD_Reference_ID); int AD_Ref_List_ID = findIdByColumnAndParentId(ctx, "AD_Ref_List", "Value", value, "AD_Reference", AD_Reference_ID);
mRefList = new X_AD_Ref_List(ctx, AD_Ref_List_ID, getTrxName(ctx)); mRefList = new X_AD_Ref_List(ctx.ctx, AD_Ref_List_ID, getTrxName(ctx));
} }
if (mRefList.getAD_Ref_List_ID() == 0 && isOfficialId(element, "AD_Ref_List_ID")) if (mRefList.getAD_Ref_List_ID() == 0 && isOfficialId(element, "AD_Ref_List_ID"))
@ -71,6 +71,7 @@ public class ReferenceListElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -90,7 +91,7 @@ public class ReferenceListElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, mRefList.getName(), logImportDetail(ctx, impDetail, 0, mRefList.getName(),
mRefList.get_ID(), action); mRefList.get_ID(), action);
throw new POSaveFailedException("ReferenceList"); throw new POSaveFailedException("Failed to save ReferenceList " + mRefList.getName());
} }
} }
} else { } else {
@ -98,15 +99,20 @@ public class ReferenceListElementHandler extends AbstractElementHandler {
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Ref_List_ID = Env.getContextAsInt(ctx, int AD_Ref_List_ID = Env.getContextAsInt(ctx.ctx,
X_AD_Ref_List.COLUMNNAME_AD_Ref_List_ID); X_AD_Ref_List.COLUMNNAME_AD_Ref_List_ID);
X_AD_Ref_List m_Ref_List = new X_AD_Ref_List(ctx, AD_Ref_List_ID, X_AD_Ref_List m_Ref_List = new X_AD_Ref_List(ctx.ctx, AD_Ref_List_ID,
getTrxName(ctx)); getTrxName(ctx));
if (ctx.packOut.getFromDate() != null) {
if (m_Ref_List.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_Ref_List.Table_Name, atts); document.startElement("", "", I_AD_Ref_List.Table_Name, atts);
@ -114,7 +120,7 @@ public class ReferenceListElementHandler extends AbstractElementHandler {
document.endElement("", "", I_AD_Ref_List.Table_Name); document.endElement("", "", I_AD_Ref_List.Table_Name);
} }
private void createRefListBinding(Properties ctx, TransformerHandler document, private void createRefListBinding(PIPOContext ctx, TransformerHandler document,
X_AD_Ref_List m_Ref_List) { X_AD_Ref_List m_Ref_List) {
List<String> excludes = defaultExcludeList(X_AD_Ref_List.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Ref_List.Table_Name);
PoExporter filler = new PoExporter(ctx, document, m_Ref_List); PoExporter filler = new PoExporter(ctx, document, m_Ref_List);
@ -128,8 +134,8 @@ public class ReferenceListElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
Env.setContext(packout.getCtx(), I_AD_Ref_List.COLUMNNAME_AD_Ref_List_ID, recordId); Env.setContext(packout.getCtx().ctx, I_AD_Ref_List.COLUMNNAME_AD_Ref_List_ID, recordId);
create(packout.getCtx(), packoutHandler); create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(I_AD_Ref_List.COLUMNNAME_AD_Ref_List_ID); packout.getCtx().ctx.remove(I_AD_Ref_List.COLUMNNAME_AD_Ref_List_ID);
} }
} }

View File

@ -19,12 +19,12 @@ package org.adempiere.pipo2.handler;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.List; import java.util.List;
import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -35,6 +35,7 @@ import org.compiere.model.I_AD_Ref_Table;
import org.compiere.model.I_AD_Reference; import org.compiere.model.I_AD_Reference;
import org.compiere.model.X_AD_Package_Imp_Detail; import org.compiere.model.X_AD_Package_Imp_Detail;
import org.compiere.model.X_AD_Ref_Table; import org.compiere.model.X_AD_Ref_Table;
import org.compiere.model.X_AD_Reference;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
@ -42,13 +43,13 @@ import org.xml.sax.helpers.AttributesImpl;
public class ReferenceTableElementHandler extends AbstractElementHandler { public class ReferenceTableElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
List<String > excludes = defaultExcludeList(X_AD_Ref_Table.Table_Name); List<String > excludes = defaultExcludeList(X_AD_Ref_Table.Table_Name);
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
if (isParentSkip(element, null)) { if (isParentSkip(element, null)) {
element.skip = true; element.skip = true;
return; return;
@ -61,7 +62,7 @@ public class ReferenceTableElementHandler extends AbstractElementHandler {
AD_Reference_ID = getParentId(element, I_AD_Reference.Table_Name); AD_Reference_ID = getParentId(element, I_AD_Reference.Table_Name);
} else { } else {
Element referenceElement = element.properties.get(I_AD_Ref_Table.COLUMNNAME_AD_Reference_ID); Element referenceElement = element.properties.get(I_AD_Ref_Table.COLUMNNAME_AD_Reference_ID);
AD_Reference_ID = ReferenceUtils.resolveReference(ctx, referenceElement, getTrxName(ctx)); AD_Reference_ID = ReferenceUtils.resolveReference(ctx.ctx, referenceElement, getTrxName(ctx));
} }
if (AD_Reference_ID <= 0 && isOfficialId(element, "AD_Reference_ID")) if (AD_Reference_ID <= 0 && isOfficialId(element, "AD_Reference_ID"))
AD_Reference_ID = getIntValue(element, "AD_Reference_ID"); AD_Reference_ID = getIntValue(element, "AD_Reference_ID");
@ -74,9 +75,9 @@ public class ReferenceTableElementHandler extends AbstractElementHandler {
pstmt.setInt(1, AD_Reference_ID); pstmt.setInt(1, AD_Reference_ID);
rs = pstmt.executeQuery(); rs = pstmt.executeQuery();
if (rs.next()) { if (rs.next()) {
refTable = new X_AD_Ref_Table(ctx, rs, getTrxName(ctx)); refTable = new X_AD_Ref_Table(ctx.ctx, rs, getTrxName(ctx));
} else { } else {
refTable = new X_AD_Ref_Table(ctx, 0, getTrxName(ctx)); refTable = new X_AD_Ref_Table(ctx.ctx, 0, getTrxName(ctx));
} }
} catch (Exception e) { } catch (Exception e) {
throw new DatabaseAccessException(e.getLocalizedMessage(), e); throw new DatabaseAccessException(e.getLocalizedMessage(), e);
@ -89,13 +90,14 @@ public class ReferenceTableElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
int tableId = refTable.getAD_Table_ID(); int tableId = refTable.getAD_Table_ID();
Element displayElement = element.properties.get("AD_Display"); Element displayElement = element.properties.get("AD_Display");
int displayColumnId = 0; int displayColumnId = 0;
if (ReferenceUtils.isIDLookup(displayElement) || ReferenceUtils.isUUIDLookup(displayElement)) { if (ReferenceUtils.isIDLookup(displayElement) || ReferenceUtils.isUUIDLookup(displayElement)) {
displayColumnId = ReferenceUtils.resolveReference(ctx, displayElement, getTrxName(ctx)); displayColumnId = ReferenceUtils.resolveReference(ctx.ctx, displayElement, getTrxName(ctx));
} else { } else {
displayColumnId = findIdByColumnAndParentId(ctx, "AD_Column", "ColumnName", displayElement.contents.toString(), "AD_Table", tableId); displayColumnId = findIdByColumnAndParentId(ctx, "AD_Column", "ColumnName", displayElement.contents.toString(), "AD_Table", tableId);
} }
@ -105,7 +107,7 @@ public class ReferenceTableElementHandler extends AbstractElementHandler {
Element keyElement = element.properties.get("AD_Key"); Element keyElement = element.properties.get("AD_Key");
int keyColumnId = 0; int keyColumnId = 0;
if (ReferenceUtils.isIDLookup(keyElement) || ReferenceUtils.isUUIDLookup(keyElement)) { if (ReferenceUtils.isIDLookup(keyElement) || ReferenceUtils.isUUIDLookup(keyElement)) {
keyColumnId = ReferenceUtils.resolveReference(ctx, keyElement, getTrxName(ctx)); keyColumnId = ReferenceUtils.resolveReference(ctx.ctx, keyElement, getTrxName(ctx));
} else { } else {
keyColumnId = findIdByColumnAndParentId(ctx, "AD_Column", "ColumnName", keyElement.contents.toString(), "AD_Table", tableId); keyColumnId = findIdByColumnAndParentId(ctx, "AD_Column", "ColumnName", keyElement.contents.toString(), "AD_Table", tableId);
} }
@ -117,35 +119,27 @@ public class ReferenceTableElementHandler extends AbstractElementHandler {
X_AD_Package_Imp_Detail impDetail = createImportDetail(ctx, element.qName, X_AD_Ref_Table.Table_Name, X_AD_Package_Imp_Detail impDetail = createImportDetail(ctx, element.qName, X_AD_Ref_Table.Table_Name,
X_AD_Ref_Table.Table_ID); X_AD_Ref_Table.Table_ID);
logImportDetail(ctx, impDetail, 1, refTable.getAD_Reference().getName(), refTable.getAD_Reference_ID(), action); int AD_Reference_ID = refTable.getAD_Reference_ID();
X_AD_Reference adReference = new X_AD_Reference(ctx.ctx, AD_Reference_ID, getTrxName(ctx));
logImportDetail(ctx, impDetail, 1, adReference.getName(), refTable.getAD_Reference_ID(), action);
} }
} else { } else {
element.skip = true; element.skip = true;
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int Reference_id = Env.getContextAsInt(ctx, int Reference_id = Env.getContextAsInt(ctx.ctx, "AD_Reference_ID");
X_AD_Ref_Table.COLUMNNAME_AD_Reference_ID);
AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table");
document.startElement("", "", I_AD_Ref_Table.Table_Name, atts);
createReferenceTableBinding(ctx, document, Reference_id); createReferenceTableBinding(ctx, document, Reference_id);
document.endElement("", "", I_AD_Ref_Table.Table_Name);
} }
private void createReferenceTableBinding(Properties ctx, private void createReferenceTableBinding(PIPOContext ctx,
TransformerHandler document, int reference_ID) { TransformerHandler document, int reference_ID) {
if (reference_ID <= PackOut.MAX_OFFICIAL_ID)
{
PoExporter filler = new PoExporter(ctx,document,null);
filler.addString("AD_Reference_ID", Integer.toString(reference_ID), new AttributesImpl());
}
String sql = "SELECT * FROM AD_Ref_Table WHERE AD_Reference_ID= " String sql = "SELECT * FROM AD_Ref_Table WHERE AD_Reference_ID= "
+ reference_ID; + reference_ID;
@ -155,7 +149,23 @@ public class ReferenceTableElementHandler extends AbstractElementHandler {
pstmt = DB.prepareStatement(sql, getTrxName(ctx)); pstmt = DB.prepareStatement(sql, getTrxName(ctx));
rs = pstmt.executeQuery(); rs = pstmt.executeQuery();
if (rs.next()) { if (rs.next()) {
X_AD_Ref_Table refTable = new X_AD_Ref_Table(ctx, rs, getTrxName(ctx)); X_AD_Ref_Table refTable = new X_AD_Ref_Table(ctx.ctx, rs, getTrxName(ctx));
if (ctx.packOut.getFromDate() != null) {
if (refTable.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table");
document.startElement("", "", X_AD_Ref_Table.Table_Name, atts);
if (reference_ID <= PackOut.MAX_OFFICIAL_ID)
{
PoExporter filler = new PoExporter(ctx,document,null);
filler.addString("AD_Reference_ID", Integer.toString(reference_ID), new AttributesImpl());
}
PoExporter filler = new PoExporter(ctx,document,refTable); PoExporter filler = new PoExporter(ctx,document,refTable);
List<String > excludes = defaultExcludeList(X_AD_Ref_Table.Table_Name); List<String > excludes = defaultExcludeList(X_AD_Ref_Table.Table_Name);
excludes.add("ad_display"); excludes.add("ad_display");
@ -163,6 +173,8 @@ public class ReferenceTableElementHandler extends AbstractElementHandler {
filler.export(excludes); filler.export(excludes);
filler.addTableReference("AD_Display", "AD_Column", "ColumnName", new AttributesImpl()); filler.addTableReference("AD_Display", "AD_Column", "ColumnName", new AttributesImpl());
filler.addTableReference("AD_Key", "AD_Column", "ColumnName", new AttributesImpl()); filler.addTableReference("AD_Key", "AD_Column", "ColumnName", new AttributesImpl());
document.endElement("", "", X_AD_Ref_Table.Table_Name);
} }
} catch (Exception e) { } catch (Exception e) {
log.log(Level.SEVERE, e.getLocalizedMessage(), e); log.log(Level.SEVERE, e.getLocalizedMessage(), e);
@ -176,8 +188,8 @@ public class ReferenceTableElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
Env.setContext(packout.getCtx(), I_AD_Ref_Table.COLUMNNAME_AD_Reference_ID, recordId); Env.setContext(packout.getCtx().ctx, I_AD_Ref_Table.COLUMNNAME_AD_Reference_ID, recordId);
create(packout.getCtx(), packoutHandler); create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(I_AD_Ref_Table.COLUMNNAME_AD_Reference_ID); packout.getCtx().ctx.remove(I_AD_Ref_Table.COLUMNNAME_AD_Reference_ID);
} }
} }

View File

@ -17,11 +17,11 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -30,6 +30,7 @@ import org.adempiere.pipo2.ReferenceUtils;
import org.adempiere.pipo2.exception.POSaveFailedException; import org.adempiere.pipo2.exception.POSaveFailedException;
import org.compiere.model.I_AD_ReportView; import org.compiere.model.I_AD_ReportView;
import org.compiere.model.I_AD_ReportView_Col; import org.compiere.model.I_AD_ReportView_Col;
import org.compiere.model.MColumn;
import org.compiere.model.X_AD_Package_Imp_Detail; import org.compiere.model.X_AD_Package_Imp_Detail;
import org.compiere.model.X_AD_ReportView_Col; import org.compiere.model.X_AD_ReportView_Col;
import org.compiere.util.DB; import org.compiere.util.DB;
@ -39,12 +40,12 @@ import org.xml.sax.helpers.AttributesImpl;
public class ReportViewColElementHandler extends AbstractElementHandler { public class ReportViewColElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_ReportView_Col.Table_Name); List<String> excludes = defaultExcludeList(X_AD_ReportView_Col.Table_Name);
String entitytype = getStringValue(element,"EntityType"); String entitytype = getStringValue(element,"EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
excludes.add("AD_Table_ID"); excludes.add("AD_Table_ID");
X_AD_ReportView_Col mReportviewCol = findPO(ctx, element); X_AD_ReportView_Col mReportviewCol = findPO(ctx, element);
if (mReportviewCol == null) { if (mReportviewCol == null) {
@ -53,25 +54,27 @@ public class ReportViewColElementHandler extends AbstractElementHandler {
AD_ReportView_ID = getParentId(element, I_AD_ReportView.Table_Name); AD_ReportView_ID = getParentId(element, I_AD_ReportView.Table_Name);
} else { } else {
Element rvElement = element.properties.get(I_AD_ReportView_Col.COLUMNNAME_AD_ReportView_ID); Element rvElement = element.properties.get(I_AD_ReportView_Col.COLUMNNAME_AD_ReportView_ID);
AD_ReportView_ID = ReferenceUtils.resolveReference(ctx, rvElement, getTrxName(ctx)); AD_ReportView_ID = ReferenceUtils.resolveReference(ctx.ctx, rvElement, getTrxName(ctx));
} }
if (AD_ReportView_ID <= 0) { if (AD_ReportView_ID <= 0) {
element.defer = true; element.defer = true;
element.unresolved = "AD_ReportView_ID";
return; return;
} }
int AD_Column_ID = 0; int AD_Column_ID = 0;
Element columnElement = element.properties.get(I_AD_ReportView_Col.COLUMNNAME_AD_Column_ID); Element columnElement = element.properties.get(I_AD_ReportView_Col.COLUMNNAME_AD_Column_ID);
if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement)) { if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement)) {
AD_Column_ID = ReferenceUtils.resolveReference(ctx, columnElement, getTrxName(ctx)); AD_Column_ID = ReferenceUtils.resolveReference(ctx.ctx, columnElement, getTrxName(ctx));
} else { } else {
if (columnElement.contents != null && columnElement.contents.length() > 0) { if (columnElement.contents != null && columnElement.contents.length() > 0) {
Element tableElement = element.properties.get("AD_Table_ID"); Element tableElement = element.properties.get("AD_Table_ID");
int AD_Table_ID = ReferenceUtils.resolveReference(ctx, tableElement, getTrxName(ctx)); int AD_Table_ID = ReferenceUtils.resolveReference(ctx.ctx, tableElement, getTrxName(ctx));
AD_Column_ID = findIdByColumnAndParentId(ctx, "AD_Column", "ColumnName", columnElement.contents.toString(), AD_Column_ID = findIdByColumnAndParentId(ctx, "AD_Column", "ColumnName", columnElement.contents.toString(),
"AD_Table", AD_Table_ID); "AD_Table", AD_Table_ID);
if (AD_Column_ID <= 0) { if (AD_Column_ID <= 0) {
element.defer = true; element.defer = true;
element.unresolved = "AD_Column_ID";
return; return;
} }
} }
@ -88,10 +91,10 @@ public class ReportViewColElementHandler extends AbstractElementHandler {
sql.append(" AND AD_ReportView_ID = ?"); sql.append(" AND AD_ReportView_ID = ?");
int id = DB.getSQLValue(getTrxName(ctx), sql.toString(), functionColumn, AD_ReportView_ID); int id = DB.getSQLValue(getTrxName(ctx), sql.toString(), functionColumn, AD_ReportView_ID);
mReportviewCol = new X_AD_ReportView_Col(ctx, id > 0 ? id : 0, getTrxName(ctx)); mReportviewCol = new X_AD_ReportView_Col(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mReportviewCol.setAD_ReportView_ID(AD_ReportView_ID); mReportviewCol.setAD_ReportView_ID(AD_ReportView_ID);
if (AD_Column_ID > 0) { if (AD_Column_ID > 0) {
mReportviewCol.setAD_Column_ID(id); mReportviewCol.setAD_Column_ID(AD_Column_ID);
} }
mReportviewCol.setFunctionColumn(functionColumn); mReportviewCol.setFunctionColumn(functionColumn);
excludes.add("FunctionColumn"); excludes.add("FunctionColumn");
@ -106,6 +109,7 @@ public class ReportViewColElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -126,7 +130,7 @@ public class ReportViewColElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, "" + mReportviewCol.getAD_ReportView_ID(), logImportDetail(ctx, impDetail, 0, "" + mReportviewCol.getAD_ReportView_ID(),
mReportviewCol.get_ID(),action); mReportviewCol.get_ID(),action);
throw new POSaveFailedException("ReportViewCol"); throw new POSaveFailedException("Failed to save ReportViewCol");
} }
} }
} else { } else {
@ -134,23 +138,30 @@ public class ReportViewColElementHandler extends AbstractElementHandler {
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_ReportView_Col_ID = Env.getContextAsInt(ctx, int AD_ReportView_Col_ID = Env.getContextAsInt(ctx.ctx,
X_AD_ReportView_Col.COLUMNNAME_AD_ReportView_Col_ID); X_AD_ReportView_Col.COLUMNNAME_AD_ReportView_Col_ID);
X_AD_ReportView_Col m_Reportview_Col = new X_AD_ReportView_Col(ctx, X_AD_ReportView_Col m_Reportview_Col = new X_AD_ReportView_Col(ctx.ctx,
AD_ReportView_Col_ID, getTrxName(ctx)); AD_ReportView_Col_ID, getTrxName(ctx));
if (ctx.packOut.getFromDate() != null) {
if (m_Reportview_Col.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_ReportView_Col.Table_Name, atts); document.startElement("", "", X_AD_ReportView_Col.Table_Name, atts);
createReportViewColBinding(ctx, document, m_Reportview_Col); createReportViewColBinding(ctx, document, m_Reportview_Col);
document.endElement("", "", I_AD_ReportView_Col.Table_Name); document.endElement("", "", X_AD_ReportView_Col.Table_Name);
} }
private void createReportViewColBinding(Properties ctx, TransformerHandler document, private void createReportViewColBinding(PIPOContext ctx, TransformerHandler document,
X_AD_ReportView_Col m_Reportview_Col) { X_AD_ReportView_Col m_Reportview_Col) {
PoExporter filler = new PoExporter(ctx, document, m_Reportview_Col); PoExporter filler = new PoExporter(ctx, document, m_Reportview_Col);
@ -159,7 +170,9 @@ public class ReportViewColElementHandler extends AbstractElementHandler {
filler.add("AD_ReportView_Col_ID", new AttributesImpl()); filler.add("AD_ReportView_Col_ID", new AttributesImpl());
if (m_Reportview_Col.getAD_Column_ID() > 0) { if (m_Reportview_Col.getAD_Column_ID() > 0) {
int AD_Table_ID = m_Reportview_Col.getAD_Column().getAD_Table_ID(); int AD_Column_ID = m_Reportview_Col.getAD_Column_ID();
MColumn mColumn = new MColumn(ctx.ctx, AD_Column_ID, getTrxName(ctx));
int AD_Table_ID = mColumn.getAD_Table_ID();
AttributesImpl tableAtts = new AttributesImpl(); AttributesImpl tableAtts = new AttributesImpl();
String value = ReferenceUtils.getTableReference("AD_Table", "TableName", AD_Table_ID, tableAtts); String value = ReferenceUtils.getTableReference("AD_Table", "TableName", AD_Table_ID, tableAtts);
filler.addString("AD_Table_ID", value, tableAtts); filler.addString("AD_Table_ID", value, tableAtts);
@ -172,8 +185,8 @@ public class ReportViewColElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
Env.setContext(packout.getCtx(), I_AD_ReportView_Col.COLUMNNAME_AD_ReportView_Col_ID, recordId); Env.setContext(packout.getCtx().ctx, I_AD_ReportView_Col.COLUMNNAME_AD_ReportView_Col_ID, recordId);
create(packout.getCtx(), packoutHandler); create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(I_AD_ReportView_Col.COLUMNNAME_AD_ReportView_Col_ID); packout.getCtx().ctx.remove(I_AD_ReportView_Col.COLUMNNAME_AD_ReportView_Col_ID);
} }
} }

View File

@ -20,13 +20,13 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.exceptions.AdempiereException; import org.adempiere.exceptions.AdempiereException;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.ElementHandler; import org.adempiere.pipo2.ElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -50,7 +50,7 @@ public class ReportViewElementHandler extends AbstractElementHandler {
private List<Integer> views = new ArrayList<Integer>(); private List<Integer> views = new ArrayList<Integer>();
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_ReportView.Table_Name); List<String> excludes = defaultExcludeList(X_AD_ReportView.Table_Name);
@ -59,7 +59,7 @@ public class ReportViewElementHandler extends AbstractElementHandler {
if (mReportview == null) { if (mReportview == null) {
String name = getStringValue(element, "Name"); String name = getStringValue(element, "Name");
int id = findIdByName(ctx, "AD_ReportView", name); int id = findIdByName(ctx, "AD_ReportView", name);
mReportview = new X_AD_ReportView(ctx, id, getTrxName(ctx)); mReportview = new X_AD_ReportView(ctx.ctx, id, getTrxName(ctx));
} }
PoFiller filler = new PoFiller(ctx, mReportview, element, this); PoFiller filler = new PoFiller(ctx, mReportview, element, this);
if (mReportview.getAD_ReportView_ID() == 0 && isOfficialId(element, "AD_ReportView_ID")) if (mReportview.getAD_ReportView_ID() == 0 && isOfficialId(element, "AD_ReportView_ID"))
@ -68,6 +68,7 @@ public class ReportViewElementHandler extends AbstractElementHandler {
List<String> notfound = filler.autoFill(excludes); List<String> notfound = filler.autoFill(excludes);
if (notfound.size() > 0) { if (notfound.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfound.toString();
return; return;
} }
@ -88,60 +89,50 @@ public class ReportViewElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, mReportview.getName(), logImportDetail(ctx, impDetail, 0, mReportview.getName(),
mReportview.get_ID(), action); mReportview.get_ID(), action);
throw new POSaveFailedException("ReportView"); throw new POSaveFailedException("Failed to save ReportView " + mReportview.getName());
} }
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
PackOut packOut = getPackOut(ctx); PackOut packOut = ctx.packOut;
int AD_ReportView_ID = Env.getContextAsInt(ctx, "AD_ReportView_ID"); int AD_ReportView_ID = Env.getContextAsInt(ctx.ctx, "AD_ReportView_ID");
if (views.contains(AD_ReportView_ID)) if (views.contains(AD_ReportView_ID))
return; return;
views.add(AD_ReportView_ID); views.add(AD_ReportView_ID);
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
X_AD_ReportView m_Reportview = new X_AD_ReportView(ctx, AD_ReportView_ID, getTrxName(ctx)); X_AD_ReportView m_Reportview = new X_AD_ReportView(ctx.ctx, AD_ReportView_ID, getTrxName(ctx));
// Export Table if neccessary // Export Table if neccessary
ElementHandler tableHandler = packOut.getHandler(I_AD_Table.Table_Name); ElementHandler tableHandler = packOut.getHandler(I_AD_Table.Table_Name);
try { try {
tableHandler.packOut(packOut, document, null, m_Reportview.getAD_Table_ID()); tableHandler.packOut(packOut, document, null, m_Reportview.getAD_Table_ID());
} catch (Exception e) { } catch (Exception e) {
throw new AdempiereException(e); throw new RuntimeException(e);
} }
boolean createElement = true;
if (ctx.packOut.getFromDate() != null) {
if (m_Reportview.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
createElement = false;
}
}
if (createElement) {
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_ReportView.Table_Name, atts); document.startElement("", "", I_AD_ReportView.Table_Name, atts);
createReportViewBinding(ctx, document, m_Reportview); createReportViewBinding(ctx, document, m_Reportview);
document.endElement("", "", I_AD_ReportView.Table_Name); }
String sql = "SELECT AD_PrintFormat_ID FROM AD_PrintFormat WHERE AD_ReportView_ID= " String sql = "SELECT AD_ReportView_Col_ID FROM AD_ReportView_Col WHERE AD_Reportview_ID= "
+ AD_ReportView_ID; + AD_ReportView_ID;
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
ResultSet rs = null; ResultSet rs = null;
try {
pstmt = DB.prepareStatement(sql, getTrxName(ctx));
rs = pstmt.executeQuery();
while (rs.next()) {
ElementHandler pftHandler = packOut.getHandler(I_AD_PrintFormat.Table_Name);
pftHandler.packOut(packOut, document, null, rs.getInt(1));
}
} catch (Exception e) {
throw new AdempiereException(e);
} finally {
DB.close(rs, pstmt);
}
sql = "SELECT AD_ReportView_Col_ID FROM AD_ReportView_Col WHERE AD_Reportview_ID= "
+ AD_ReportView_ID;
pstmt = null;
rs = null;
try { try {
pstmt = DB.prepareStatement(sql, getTrxName(ctx)); pstmt = DB.prepareStatement(sql, getTrxName(ctx));
rs = pstmt.executeQuery(); rs = pstmt.executeQuery();
@ -153,19 +144,40 @@ public class ReportViewElementHandler extends AbstractElementHandler {
} finally { } finally {
DB.close(rs, pstmt); DB.close(rs, pstmt);
} }
if (createElement) {
document.endElement("", "", X_AD_ReportView.Table_Name);
} }
private void createReportViewCol(Properties ctx, sql = "SELECT AD_PrintFormat_ID FROM AD_PrintFormat WHERE AD_ReportView_ID= "
+ AD_ReportView_ID;
pstmt = null;
rs = null;
try {
pstmt = DB.prepareStatement(sql, getTrxName(ctx));
rs = pstmt.executeQuery();
while (rs.next()) {
ElementHandler pftHandler = packOut.getHandler(I_AD_PrintFormat.Table_Name);
pftHandler.packOut(packOut, document, null, rs.getInt(1));
}
} catch (Exception e) {
throw new AdempiereException(e);
} finally {
DB.close(rs, pstmt);
}
}
private void createReportViewCol(PIPOContext ctx,
TransformerHandler document, int AD_ReportView_Col_ID) TransformerHandler document, int AD_ReportView_Col_ID)
throws SAXException { throws SAXException {
Env.setContext(ctx, Env.setContext(ctx.ctx,
X_AD_ReportView_Col.COLUMNNAME_AD_ReportView_Col_ID, X_AD_ReportView_Col.COLUMNNAME_AD_ReportView_Col_ID,
AD_ReportView_Col_ID); AD_ReportView_Col_ID);
columnHandler.create(ctx, document); columnHandler.create(ctx, document);
ctx.remove(X_AD_ReportView_Col.COLUMNNAME_AD_ReportView_Col_ID); ctx.ctx.remove(X_AD_ReportView_Col.COLUMNNAME_AD_ReportView_Col_ID);
} }
private void createReportViewBinding(Properties ctx, TransformerHandler document, private void createReportViewBinding(PIPOContext ctx, TransformerHandler document,
X_AD_ReportView m_Reportview) { X_AD_ReportView m_Reportview) {
PoExporter filler = new PoExporter(ctx, document, m_Reportview); PoExporter filler = new PoExporter(ctx, document, m_Reportview);
@ -177,8 +189,8 @@ public class ReportViewElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_ReportView_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_ReportView_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_ReportView_ID); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_ReportView_ID);
} }
} }

View File

@ -20,12 +20,12 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -61,7 +61,7 @@ public class RoleElementHandler extends AbstractElementHandler {
private TaskAccessElementHandler taskHandler = new TaskAccessElementHandler(); private TaskAccessElementHandler taskHandler = new TaskAccessElementHandler();
private WorkflowAccessElementHandler workflowHandler = new WorkflowAccessElementHandler(); private WorkflowAccessElementHandler workflowHandler = new WorkflowAccessElementHandler();
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_Role.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Role.Table_Name);
@ -70,7 +70,7 @@ public class RoleElementHandler extends AbstractElementHandler {
if (mRole == null) { if (mRole == null) {
String name = getStringValue(element, "Name", excludes); String name = getStringValue(element, "Name", excludes);
int id = findIdByName(ctx, "AD_Role", name); int id = findIdByName(ctx, "AD_Role", name);
mRole = new MRole(ctx, id > 0 ? id : 0, getTrxName(ctx)); mRole = new MRole(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mRole.setName(name); mRole.setName(name);
} }
@ -81,6 +81,7 @@ public class RoleElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -101,26 +102,36 @@ public class RoleElementHandler extends AbstractElementHandler {
logImportDetail(ctx, impDetail, 0, mRole.getName(), mRole.get_ID(), logImportDetail(ctx, impDetail, 0, mRole.getName(), mRole.get_ID(),
action); action);
throw new POSaveFailedException("Role"); throw new POSaveFailedException("Failed to save Role " + mRole.getName());
} }
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int Role_id = Env.getContextAsInt(ctx, int Role_id = Env.getContextAsInt(ctx.ctx,
X_AD_Package_Exp_Detail.COLUMNNAME_AD_Role_ID); X_AD_Package_Exp_Detail.COLUMNNAME_AD_Role_ID);
if (roles.contains(Role_id)) if (roles.contains(Role_id))
return; return;
roles.add(Role_id); roles.add(Role_id);
X_AD_Role m_Role = new X_AD_Role(ctx, Role_id, null);
boolean createElement = true;
X_AD_Role m_Role = new X_AD_Role(ctx.ctx, Role_id, null);
if (ctx.packOut.getFromDate() != null) {
if (m_Role.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
createElement = false;
}
}
if (createElement) {
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_Role.Table_Name, atts); document.startElement("", "", I_AD_Role.Table_Name, atts);
createRoleBinding(ctx, document, m_Role); createRoleBinding(ctx, document, m_Role);
}
// Process org access // Process org access
String sql = "SELECT AD_Org_ID, AD_Role_ID FROM AD_Role_OrgAccess WHERE AD_Role_ID= " String sql = "SELECT AD_Org_ID, AD_Role_ID FROM AD_Role_OrgAccess WHERE AD_Role_ID= "
@ -141,7 +152,8 @@ public class RoleElementHandler extends AbstractElementHandler {
} }
// Process user assignment access // Process user assignment access
sql = "SELECT AD_User_ID, AD_Role_ID, AD_Org_ID FROM AD_User_Roles WHERE AD_Role_ID= " + Role_id; sql = "SELECT AD_User_ID, AD_Role_ID, AD_Org_ID FROM AD_User_Roles WHERE AD_Role_ID= " + Role_id
+ " AND AD_User_ID > 0 ";
pstmt = null; pstmt = null;
rs = null; rs = null;
try { try {
@ -241,75 +253,78 @@ public class RoleElementHandler extends AbstractElementHandler {
} finally { } finally {
DB.close(rs, pstmt); DB.close(rs, pstmt);
} }
document.endElement("", "", I_AD_Role.Table_Name);
if (createElement) {
document.endElement("", "", X_AD_Role.Table_Name);
}
} }
private void createTaskAccess(Properties ctx, TransformerHandler document, private void createTaskAccess(PIPOContext ctx, TransformerHandler document,
int AD_Task_ID, int AD_Role_ID) throws SAXException { int AD_Task_ID, int AD_Role_ID) throws SAXException {
Env.setContext(ctx, X_AD_Task.COLUMNNAME_AD_Task_ID, AD_Task_ID); Env.setContext(ctx.ctx, X_AD_Task.COLUMNNAME_AD_Task_ID, AD_Task_ID);
Env.setContext(ctx, X_AD_Role.COLUMNNAME_AD_Role_ID, AD_Role_ID); Env.setContext(ctx.ctx, X_AD_Role.COLUMNNAME_AD_Role_ID, AD_Role_ID);
taskHandler.create(ctx, document); taskHandler.create(ctx, document);
ctx.remove(X_AD_Task.COLUMNNAME_AD_Task_ID); ctx.ctx.remove(X_AD_Task.COLUMNNAME_AD_Task_ID);
ctx.remove(X_AD_Role.COLUMNNAME_AD_Role_ID); ctx.ctx.remove(X_AD_Role.COLUMNNAME_AD_Role_ID);
} }
private void createWorkflowAccess(Properties ctx, private void createWorkflowAccess(PIPOContext ctx,
TransformerHandler document, int AD_Workflow_ID, int AD_Role_ID) throws SAXException { TransformerHandler document, int AD_Workflow_ID, int AD_Role_ID) throws SAXException {
Env.setContext(ctx, X_AD_Workflow.COLUMNNAME_AD_Workflow_ID, AD_Workflow_ID); Env.setContext(ctx.ctx, X_AD_Workflow.COLUMNNAME_AD_Workflow_ID, AD_Workflow_ID);
Env.setContext(ctx, X_AD_Role.COLUMNNAME_AD_Role_ID, AD_Role_ID); Env.setContext(ctx.ctx, X_AD_Role.COLUMNNAME_AD_Role_ID, AD_Role_ID);
workflowHandler.create(ctx, document); workflowHandler.create(ctx, document);
ctx.remove(X_AD_Workflow.COLUMNNAME_AD_Workflow_ID); ctx.ctx.remove(X_AD_Workflow.COLUMNNAME_AD_Workflow_ID);
ctx.remove(X_AD_Role.COLUMNNAME_AD_Role_ID); ctx.ctx.remove(X_AD_Role.COLUMNNAME_AD_Role_ID);
} }
private void createFormAccess(Properties ctx, TransformerHandler document, private void createFormAccess(PIPOContext ctx, TransformerHandler document,
int AD_Form_ID, int AD_Role_ID) throws SAXException { int AD_Form_ID, int AD_Role_ID) throws SAXException {
Env.setContext(ctx, X_AD_Form.COLUMNNAME_AD_Form_ID, AD_Form_ID); Env.setContext(ctx.ctx, X_AD_Form.COLUMNNAME_AD_Form_ID, AD_Form_ID);
Env.setContext(ctx, X_AD_Role.COLUMNNAME_AD_Role_ID, AD_Role_ID); Env.setContext(ctx.ctx, X_AD_Role.COLUMNNAME_AD_Role_ID, AD_Role_ID);
formHandler.create(ctx, document); formHandler.create(ctx, document);
ctx.remove(X_AD_Form.COLUMNNAME_AD_Form_ID); ctx.ctx.remove(X_AD_Form.COLUMNNAME_AD_Form_ID);
ctx.remove(X_AD_Role.COLUMNNAME_AD_Role_ID); ctx.ctx.remove(X_AD_Role.COLUMNNAME_AD_Role_ID);
} }
private void createProcessAccess(Properties ctx, private void createProcessAccess(PIPOContext ctx,
TransformerHandler document, int AD_Process_ID, int AD_Role_ID) throws SAXException { TransformerHandler document, int AD_Process_ID, int AD_Role_ID) throws SAXException {
Env.setContext(ctx, X_AD_Process.COLUMNNAME_AD_Process_ID, AD_Process_ID); Env.setContext(ctx.ctx, X_AD_Process.COLUMNNAME_AD_Process_ID, AD_Process_ID);
Env.setContext(ctx, X_AD_Role.COLUMNNAME_AD_Role_ID, AD_Role_ID); Env.setContext(ctx.ctx, X_AD_Role.COLUMNNAME_AD_Role_ID, AD_Role_ID);
processHandler.create(ctx, document); processHandler.create(ctx, document);
ctx.remove(X_AD_Process.COLUMNNAME_AD_Process_ID); ctx.ctx.remove(X_AD_Process.COLUMNNAME_AD_Process_ID);
ctx.remove(X_AD_Role.COLUMNNAME_AD_Role_ID); ctx.ctx.remove(X_AD_Role.COLUMNNAME_AD_Role_ID);
} }
private void createWindowAccess(Properties ctx, private void createWindowAccess(PIPOContext ctx,
TransformerHandler document, int AD_Window_ID, int AD_Role_ID) throws SAXException { TransformerHandler document, int AD_Window_ID, int AD_Role_ID) throws SAXException {
Env.setContext(ctx, X_AD_Window.COLUMNNAME_AD_Window_ID, AD_Window_ID); Env.setContext(ctx.ctx, X_AD_Window.COLUMNNAME_AD_Window_ID, AD_Window_ID);
Env.setContext(ctx, X_AD_Role.COLUMNNAME_AD_Role_ID, AD_Role_ID); Env.setContext(ctx.ctx, X_AD_Role.COLUMNNAME_AD_Role_ID, AD_Role_ID);
windowHandler.create(ctx, document); windowHandler.create(ctx, document);
ctx.remove(X_AD_Window.COLUMNNAME_AD_Window_ID); ctx.ctx.remove(X_AD_Window.COLUMNNAME_AD_Window_ID);
ctx.remove(X_AD_Role.COLUMNNAME_AD_Role_ID); ctx.ctx.remove(X_AD_Role.COLUMNNAME_AD_Role_ID);
} }
private void createUserRole(Properties ctx, TransformerHandler document, private void createUserRole(PIPOContext ctx, TransformerHandler document,
int AD_User_ID, int AD_Role_ID, int AD_Org_ID) throws SAXException { int AD_User_ID, int AD_Role_ID, int AD_Org_ID) throws SAXException {
Env.setContext(ctx, X_AD_User.COLUMNNAME_AD_User_ID, AD_User_ID); Env.setContext(ctx.ctx, X_AD_User.COLUMNNAME_AD_User_ID, AD_User_ID);
Env.setContext(ctx, X_AD_Role.COLUMNNAME_AD_Role_ID, AD_Role_ID); Env.setContext(ctx.ctx, X_AD_Role.COLUMNNAME_AD_Role_ID, AD_Role_ID);
Env.setContext(ctx, "AD_Org_ID", AD_Org_ID); Env.setContext(ctx.ctx, "AD_Org_ID", AD_Org_ID);
userHandler.create(ctx, document); userHandler.create(ctx, document);
ctx.remove(X_AD_User.COLUMNNAME_AD_User_ID); ctx.ctx.remove(X_AD_User.COLUMNNAME_AD_User_ID);
ctx.remove(X_AD_Role.COLUMNNAME_AD_Role_ID); ctx.ctx.remove(X_AD_Role.COLUMNNAME_AD_Role_ID);
ctx.remove("AD_Org_ID"); ctx.ctx.remove("AD_Org_ID");
} }
private void createOrgAccess(Properties ctx, TransformerHandler document, private void createOrgAccess(PIPOContext ctx, TransformerHandler document,
int AD_Org_ID, int AD_Role_ID) throws SAXException { int AD_Org_ID, int AD_Role_ID) throws SAXException {
Env.setContext(ctx, "AD_Org_ID", AD_Org_ID); Env.setContext(ctx.ctx, "AD_Org_ID", AD_Org_ID);
Env.setContext(ctx, X_AD_Role.COLUMNNAME_AD_Role_ID, AD_Role_ID); Env.setContext(ctx.ctx, X_AD_Role.COLUMNNAME_AD_Role_ID, AD_Role_ID);
orgHandler.create(ctx, document); orgHandler.create(ctx, document);
ctx.remove("AD_Org_ID"); ctx.ctx.remove("AD_Org_ID");
ctx.remove(X_AD_Role.COLUMNNAME_AD_Role_ID); ctx.ctx.remove(X_AD_Role.COLUMNNAME_AD_Role_ID);
} }
private void createRoleBinding(Properties ctx, TransformerHandler document, private void createRoleBinding(PIPOContext ctx, TransformerHandler document,
X_AD_Role m_Role) { X_AD_Role m_Role) {
PoExporter filler = new PoExporter(ctx, document, m_Role); PoExporter filler = new PoExporter(ctx, document, m_Role);
List<String> excludes = defaultExcludeList(X_AD_Role.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Role.Table_Name);
@ -329,8 +344,8 @@ public class RoleElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_Role_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Role_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Role_ID); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Role_ID);
} }
} }

View File

@ -19,16 +19,17 @@ package org.adempiere.pipo2.handler;
import java.sql.Connection; import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.Statement; import java.sql.Statement;
import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
import org.adempiere.pipo2.PackoutItem; import org.adempiere.pipo2.PackoutItem;
import org.adempiere.pipo2.SQLElementParameters; import org.adempiere.pipo2.SQLElementParameters;
import org.compiere.model.X_AD_Package_Imp_Detail;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
@ -36,13 +37,13 @@ import org.xml.sax.helpers.AttributesImpl;
public class SQLStatementElementHandler extends AbstractElementHandler { public class SQLStatementElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
String elementValue = element.getElementValue(); String elementValue = element.getElementValue();
log.info(elementValue); log.info(elementValue);
String DBType = getStringValue(element, "DBType"); String DBType = getStringValue(element, "DBType");
String sql = getStringValue(element, "statement"); String sql = getStringValue(element, "statement");
if (sql.endsWith(";")) if (sql.endsWith(";") && !(sql.toLowerCase().endsWith("end;")))
sql = sql.substring(0, sql.length() - 1); sql = sql.substring(0, sql.length() - 1);
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
try { try {
@ -52,8 +53,8 @@ public class SQLStatementElementHandler extends AbstractElementHandler {
log.info("Executed SQL Statement: "+ getStringValue(element, "statement") + " ReturnValue="+n); log.info("Executed SQL Statement: "+ getStringValue(element, "statement") + " ReturnValue="+n);
} }
else if(DB.isOracle() == true && DBType.equals("Oracle")) { else if(DB.isOracle() == true && DBType.equals("Oracle")) {
pstmt.executeUpdate(); int n = pstmt.executeUpdate();
log.info("Executed SQL Statement for Oracle: "+ getStringValue(element, "statement")); log.info("Executed SQL Statement for Oracle: "+ getStringValue(element, "statement") + " ReturnValue="+n);
} }
else if ( DB.isPostgreSQL() else if ( DB.isPostgreSQL()
&& ( DBType.equals("Postgres") && ( DBType.equals("Postgres")
@ -78,20 +79,27 @@ public class SQLStatementElementHandler extends AbstractElementHandler {
m_con.close(); m_con.close();
} }
} }
X_AD_Package_Imp_Detail impDetail = createImportDetail(ctx, element.qName, "",
0);
logImportDetail (ctx, impDetail, 1, "SQLStatement",1,"Execute");
} catch (Exception e) { } catch (Exception e) {
log.log(Level.SEVERE,"SQLSatement", e); log.log(Level.SEVERE,"SQLSatement", e);
X_AD_Package_Imp_Detail impDetail = createImportDetail(ctx, element.qName, "",
0);
logImportDetail (ctx, impDetail, 0, "SQLStatement",1,"Execute");
} finally { } finally {
DB.close(pstmt); DB.close(pstmt);
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
String SQLStatement = Env.getContext(ctx, SQLElementParameters.SQL_STATEMENT); String SQLStatement = Env.getContext(ctx.ctx, SQLElementParameters.SQL_STATEMENT);
String DBType = Env.getContext(ctx, SQLElementParameters.DB_TYPE); String DBType = Env.getContext(ctx.ctx, SQLElementParameters.DB_TYPE);
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "custom"); addTypeName(atts, "custom");
document.startElement("","","SQLStatement",atts); document.startElement("","","SQLStatement",atts);
@ -108,7 +116,9 @@ public class SQLStatementElementHandler extends AbstractElementHandler {
document.startElement("","","statement", new AttributesImpl()); document.startElement("","","statement", new AttributesImpl());
contents = sqlStatement.toCharArray(); contents = sqlStatement.toCharArray();
document.startCDATA();
document.characters(contents,0,contents.length); document.characters(contents,0,contents.length);
document.endCDATA();
document.endElement("","","statement"); document.endElement("","","statement");
} }
@ -116,10 +126,10 @@ public class SQLStatementElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int field) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int field) throws Exception
{ {
PackoutItem detail = packout.getCurrentPackoutItem(); PackoutItem detail = packout.getCurrentPackoutItem();
Env.setContext(packout.getCtx(), SQLElementParameters.SQL_STATEMENT, (String)detail.getProperty(SQLElementParameters.SQL_STATEMENT)); Env.setContext(packout.getCtx().ctx, SQLElementParameters.SQL_STATEMENT, (String)detail.getProperty(SQLElementParameters.SQL_STATEMENT));
Env.setContext(packout.getCtx(), SQLElementParameters.DB_TYPE, (String)detail.getProperty(SQLElementParameters.DB_TYPE)); Env.setContext(packout.getCtx().ctx, SQLElementParameters.DB_TYPE, (String)detail.getProperty(SQLElementParameters.DB_TYPE));
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(SQLElementParameters.SQL_STATEMENT); packout.getCtx().ctx.remove(SQLElementParameters.SQL_STATEMENT);
packout.getCtx().remove(SQLElementParameters.DB_TYPE); packout.getCtx().ctx.remove(SQLElementParameters.DB_TYPE);
} }
} }

View File

@ -19,7 +19,6 @@ package org.adempiere.pipo2.handler;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.List; import java.util.List;
import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
@ -27,6 +26,7 @@ import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.exceptions.AdempiereException; import org.adempiere.exceptions.AdempiereException;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.ElementHandler; import org.adempiere.pipo2.ElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -50,11 +50,11 @@ public class TabElementHandler extends AbstractElementHandler {
private FieldElementHandler fieldHandler = new FieldElementHandler(); private FieldElementHandler fieldHandler = new FieldElementHandler();
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_Tab.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Tab.Table_Name);
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
if (isParentDefer(element, I_AD_Window.Table_Name)) { if (isParentDefer(element, I_AD_Window.Table_Name)) {
element.defer = true; element.defer = true;
return; return;
@ -69,17 +69,19 @@ public class TabElementHandler extends AbstractElementHandler {
windowId = getParentId(element, I_AD_Window.Table_Name); windowId = getParentId(element, I_AD_Window.Table_Name);
} else { } else {
Element windowElement = element.properties.get(I_AD_Tab.COLUMNNAME_AD_Window_ID); Element windowElement = element.properties.get(I_AD_Tab.COLUMNNAME_AD_Window_ID);
windowId = ReferenceUtils.resolveReference(ctx, windowElement, getTrxName(ctx)); windowId = ReferenceUtils.resolveReference(ctx.ctx, windowElement, getTrxName(ctx));
} }
if (windowId <= 0) { if (windowId <= 0) {
element.defer = true; element.defer = true;
element.unresolved = "AD_Window_ID";
return; return;
} }
Element tableElement = element.properties.get(I_AD_Tab.COLUMNNAME_AD_Table_ID); Element tableElement = element.properties.get(I_AD_Tab.COLUMNNAME_AD_Table_ID);
int tableId = ReferenceUtils.resolveReference(ctx, tableElement, getTrxName(ctx)); int tableId = ReferenceUtils.resolveReference(ctx.ctx, tableElement, getTrxName(ctx));
if (tableId <= 0) { if (tableId <= 0) {
element.defer = true; element.defer = true;
element.unresolved = "AD_Table_ID";
return; return;
} }
@ -88,7 +90,7 @@ public class TabElementHandler extends AbstractElementHandler {
+ " AND AD_Table_ID = ?"; + " AND AD_Table_ID = ?";
int id = DB.getSQLValue(getTrxName(ctx), sql, windowId, name, tableId); int id = DB.getSQLValue(getTrxName(ctx), sql, windowId, name, tableId);
mTab = new MTab(ctx, id > 0 ? id : 0, getTrxName(ctx)); mTab = new MTab(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mTab.setAD_Table_ID(tableId); mTab.setAD_Table_ID(tableId);
mTab.setName(name); mTab.setName(name);
mTab.setAD_Window_ID(windowId); mTab.setAD_Window_ID(windowId);
@ -101,7 +103,7 @@ public class TabElementHandler extends AbstractElementHandler {
Element columnElement = element.properties.get(I_AD_Tab.COLUMNNAME_AD_Column_ID); Element columnElement = element.properties.get(I_AD_Tab.COLUMNNAME_AD_Column_ID);
int AD_Column_ID = 0; int AD_Column_ID = 0;
if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement)) { if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement)) {
AD_Column_ID = ReferenceUtils.resolveReference(ctx, columnElement, getTrxName(ctx)); AD_Column_ID = ReferenceUtils.resolveReference(ctx.ctx, columnElement, getTrxName(ctx));
} else if (columnElement.contents != null && columnElement.contents.length() > 0){ } else if (columnElement.contents != null && columnElement.contents.length() > 0){
AD_Column_ID = findIdByColumnAndParentId (ctx, "AD_Column","ColumnName", columnElement.contents.toString(), AD_Column_ID = findIdByColumnAndParentId (ctx, "AD_Column","ColumnName", columnElement.contents.toString(),
"AD_Table", mTab.getAD_Table_ID()); "AD_Table", mTab.getAD_Table_ID());
@ -111,7 +113,7 @@ public class TabElementHandler extends AbstractElementHandler {
columnElement = element.properties.get(I_AD_Tab.COLUMNNAME_AD_ColumnSortOrder_ID); columnElement = element.properties.get(I_AD_Tab.COLUMNNAME_AD_ColumnSortOrder_ID);
AD_Column_ID = 0; AD_Column_ID = 0;
if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement)) { if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement)) {
AD_Column_ID = ReferenceUtils.resolveReference(ctx, columnElement, getTrxName(ctx)); AD_Column_ID = ReferenceUtils.resolveReference(ctx.ctx, columnElement, getTrxName(ctx));
} else if (columnElement.contents != null && columnElement.contents.length() > 0){ } else if (columnElement.contents != null && columnElement.contents.length() > 0){
AD_Column_ID = findIdByColumnAndParentId (ctx, "AD_Column","ColumnName", columnElement.contents.toString(), AD_Column_ID = findIdByColumnAndParentId (ctx, "AD_Column","ColumnName", columnElement.contents.toString(),
"AD_Table", mTab.getAD_Table_ID()); "AD_Table", mTab.getAD_Table_ID());
@ -121,7 +123,7 @@ public class TabElementHandler extends AbstractElementHandler {
columnElement = element.properties.get(I_AD_Tab.COLUMNNAME_AD_ColumnSortYesNo_ID); columnElement = element.properties.get(I_AD_Tab.COLUMNNAME_AD_ColumnSortYesNo_ID);
AD_Column_ID = 0; AD_Column_ID = 0;
if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement)) { if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement)) {
AD_Column_ID = ReferenceUtils.resolveReference(ctx, columnElement, getTrxName(ctx)); AD_Column_ID = ReferenceUtils.resolveReference(ctx.ctx, columnElement, getTrxName(ctx));
} else if (columnElement.contents != null && columnElement.contents.length() > 0){ } else if (columnElement.contents != null && columnElement.contents.length() > 0){
AD_Column_ID = findIdByColumnAndParentId (ctx, "AD_Column","ColumnName", columnElement.contents.toString(), AD_Column_ID = findIdByColumnAndParentId (ctx, "AD_Column","ColumnName", columnElement.contents.toString(),
"AD_Table", mTab.getAD_Table_ID()); "AD_Table", mTab.getAD_Table_ID());
@ -131,6 +133,7 @@ public class TabElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -150,7 +153,7 @@ public class TabElementHandler extends AbstractElementHandler {
element.recordId = mTab.getAD_Tab_ID(); element.recordId = mTab.getAD_Tab_ID();
} else { } else {
logImportDetail (ctx, impDetail, 0, mTab.getName(), mTab.get_ID(),action); logImportDetail (ctx, impDetail, 0, mTab.getName(), mTab.get_ID(),action);
throw new POSaveFailedException("Tab"); throw new POSaveFailedException("Failed to save Tab " + mTab.getName());
} }
} }
} else { } else {
@ -159,18 +162,28 @@ public class TabElementHandler extends AbstractElementHandler {
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
PackOut packOut = getPackOut(ctx); PackOut packOut = ctx.packOut;
int AD_Tab_ID = Env.getContextAsInt(ctx, X_AD_Tab.COLUMNNAME_AD_Tab_ID); int AD_Tab_ID = Env.getContextAsInt(ctx.ctx, "AD_Tab_ID");
X_AD_Tab m_Tab = new X_AD_Tab (ctx, AD_Tab_ID, getTrxName(ctx));
boolean createElement = true;
X_AD_Tab m_Tab = new X_AD_Tab (ctx.ctx, AD_Tab_ID, getTrxName(ctx));
if (ctx.packOut.getFromDate() != null) {
if (m_Tab.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
createElement = false;
}
}
if (createElement) {
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("","",I_AD_Tab.Table_Name,atts); document.startElement("","",I_AD_Tab.Table_Name,atts);
createTabBinding(ctx,document,m_Tab); createTabBinding(ctx,document,m_Tab);
}
//Fields tags. //Fields tags.
String sql = "SELECT AD_Field_ID FROM AD_FIELD WHERE AD_TAB_ID = " + AD_Tab_ID String sql = "SELECT AD_Field_ID FROM AD_FIELD WHERE AD_TAB_ID = " + AD_Tab_ID
+ "ORDER BY SEQNO asc"; + "ORDER BY SEQNO asc";
@ -193,7 +206,10 @@ public class TabElementHandler extends AbstractElementHandler {
{ {
DB.close(rs, pstmt); DB.close(rs, pstmt);
} }
document.endElement("","",I_AD_Tab.Table_Name);
if (createElement) {
document.endElement("","",X_AD_Tab.Table_Name);
}
if(m_Tab.getAD_Process_ID() > 0 ) if(m_Tab.getAD_Process_ID() > 0 )
{ {
@ -210,14 +226,14 @@ public class TabElementHandler extends AbstractElementHandler {
} }
private void createField(Properties ctx, TransformerHandler document, private void createField(PIPOContext ctx, TransformerHandler document,
int AD_Field_ID) throws SAXException { int AD_Field_ID) throws SAXException {
Env.setContext(ctx, X_AD_Field.COLUMNNAME_AD_Field_ID, AD_Field_ID); Env.setContext(ctx.ctx, X_AD_Field.COLUMNNAME_AD_Field_ID, AD_Field_ID);
fieldHandler.create(ctx, document); fieldHandler.create(ctx, document);
ctx.remove(X_AD_Field.COLUMNNAME_AD_Field_ID); ctx.ctx.remove(X_AD_Field.COLUMNNAME_AD_Field_ID);
} }
private void createTabBinding(Properties ctx, TransformerHandler document, X_AD_Tab m_Tab) private void createTabBinding(PIPOContext ctx, TransformerHandler document, X_AD_Tab m_Tab)
{ {
PoExporter filler = new PoExporter(ctx, document, m_Tab); PoExporter filler = new PoExporter(ctx, document, m_Tab);
List<String> excludes = defaultExcludeList(X_AD_Tab.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Tab.Table_Name);
@ -232,8 +248,8 @@ public class TabElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
Env.setContext(packout.getCtx(), I_AD_Tab.COLUMNNAME_AD_Tab_ID, recordId); Env.setContext(packout.getCtx().ctx, I_AD_Tab.COLUMNNAME_AD_Tab_ID, recordId);
create(packout.getCtx(), packoutHandler); create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(I_AD_Tab.COLUMNNAME_AD_Tab_ID); packout.getCtx().ctx.remove(I_AD_Tab.COLUMNNAME_AD_Tab_ID);
} }
} }

View File

@ -20,13 +20,13 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.exceptions.AdempiereException; import org.adempiere.exceptions.AdempiereException;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.ElementHandler; import org.adempiere.pipo2.ElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackIn; import org.adempiere.pipo2.PackIn;
@ -49,12 +49,12 @@ public class TableElementHandler extends AbstractElementHandler {
private List<Integer>tables = new ArrayList<Integer>(); private List<Integer>tables = new ArrayList<Integer>();
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
PackIn packIn = getPackIn(ctx); PackIn packIn = ctx.packIn;
List<String> excludes = defaultExcludeList(X_AD_Table.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Table.Table_Name);
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
MTable mTable = findPO(ctx, element); MTable mTable = findPO(ctx, element);
if (mTable == null) { if (mTable == null) {
@ -70,7 +70,7 @@ public class TableElementHandler extends AbstractElementHandler {
return; return;
} }
mTable = new MTable(ctx, id > 0 ? id : 0, getTrxName(ctx)); mTable = new MTable(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mTable.setTableName(tableName); mTable.setTableName(tableName);
} }
@ -83,6 +83,7 @@ public class TableElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -105,7 +106,7 @@ public class TableElementHandler extends AbstractElementHandler {
} }
else{ else{
logImportDetail (ctx, impDetail, 0, mTable.getName(), mTable.get_ID(),action); logImportDetail (ctx, impDetail, 0, mTable.getName(), mTable.get_ID(),action);
throw new POSaveFailedException("Table"); throw new POSaveFailedException("Failed to save Table " + mTable.getName());
} }
} }
} else { } else {
@ -113,22 +114,30 @@ public class TableElementHandler extends AbstractElementHandler {
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Table_ID = Env.getContextAsInt(ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Table_ID); int AD_Table_ID = Env.getContextAsInt(ctx.ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Table_ID);
PackOut packOut = getPackOut(ctx); PackOut packOut = ctx.packOut;
boolean exported = isTableProcess(ctx, AD_Table_ID); boolean exported = isTableProcess(ctx, AD_Table_ID);
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
//Export table if not already done so //Export table if not already done so
if (!exported){ if (!exported){
X_AD_Table m_Table = new X_AD_Table (ctx, AD_Table_ID, null); boolean createElement = true;
X_AD_Table m_Table = new X_AD_Table (ctx.ctx, AD_Table_ID, null);
if (ctx.packOut.getFromDate() != null) {
if (m_Table.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
createElement = false;
}
}
if (createElement) {
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("","",I_AD_Table.Table_Name,atts); document.startElement("","",I_AD_Table.Table_Name,atts);
createTableBinding(ctx,document,m_Table); createTableBinding(ctx,document,m_Table);
}
String sql = "SELECT * FROM AD_Column WHERE AD_Table_ID = ? " String sql = "SELECT * FROM AD_Column WHERE AD_Table_ID = ? "
+ " ORDER BY IsKey DESC, AD_Column_ID"; // Export key column as the first one + " ORDER BY IsKey DESC, AD_Column_ID"; // Export key column as the first one
@ -176,18 +185,21 @@ public class TableElementHandler extends AbstractElementHandler {
} finally { } finally {
DB.close(rs, pstmt); DB.close(rs, pstmt);
} }
document.endElement("","",I_AD_Table.Table_Name);
if (createElement) {
document.endElement("","",X_AD_Table.Table_Name);
}
} }
} }
private void createColumn(Properties ctx, TransformerHandler document, int AD_Column_ID) throws SAXException { private void createColumn(PIPOContext ctx, TransformerHandler document, int AD_Column_ID) throws SAXException {
Env.setContext(ctx, X_AD_Column.COLUMNNAME_AD_Column_ID, AD_Column_ID); Env.setContext(ctx.ctx, X_AD_Column.COLUMNNAME_AD_Column_ID, AD_Column_ID);
columnHandler.create(ctx, document); columnHandler.create(ctx, document);
ctx.remove(X_AD_Column.COLUMNNAME_AD_Column_ID); ctx.ctx.remove(X_AD_Column.COLUMNNAME_AD_Column_ID);
} }
private boolean isTableProcess(Properties ctx, int AD_Table_ID) { private boolean isTableProcess(PIPOContext ctx, int AD_Table_ID) {
if (tables.contains(AD_Table_ID)) if (tables.contains(AD_Table_ID))
return true; return true;
else { else {
@ -196,7 +208,7 @@ public class TableElementHandler extends AbstractElementHandler {
} }
} }
private void createTableBinding(Properties ctx, TransformerHandler document, X_AD_Table m_Table) private void createTableBinding(PIPOContext ctx, TransformerHandler document, X_AD_Table m_Table)
{ {
PoExporter filler = new PoExporter(ctx, document, m_Table); PoExporter filler = new PoExporter(ctx, document, m_Table);
if (m_Table.getAD_Table_ID() <= PackOut.MAX_OFFICIAL_ID) if (m_Table.getAD_Table_ID() <= PackOut.MAX_OFFICIAL_ID)
@ -210,8 +222,8 @@ public class TableElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_Table_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Table_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Table_ID); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Table_ID);
} }
} }

View File

@ -17,11 +17,11 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
@ -39,7 +39,7 @@ import org.xml.sax.helpers.AttributesImpl;
public class TaskAccessElementHandler extends AbstractElementHandler { public class TaskAccessElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
int roleid =0; int roleid =0;
int taskid =0; int taskid =0;
List<String> excludes = defaultExcludeList(X_AD_Task_Access.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Task_Access.Table_Name);
@ -49,17 +49,28 @@ public class TaskAccessElementHandler extends AbstractElementHandler {
if (getParentId(element, I_AD_Role.Table_Name) > 0) { if (getParentId(element, I_AD_Role.Table_Name) > 0) {
roleid = getParentId(element, I_AD_Role.Table_Name); roleid = getParentId(element, I_AD_Role.Table_Name);
} else { } else {
Element roleElement = element.properties.get(I_AD_Task_Access.COLUMNNAME_AD_Role_ID); Element roleElement = element.properties.get("AD_Role_ID");
roleid = ReferenceUtils.resolveReference(ctx, roleElement, getTrxName(ctx)); roleid = ReferenceUtils.resolveReference(ctx.ctx, roleElement, getTrxName(ctx));
}
if (roleid <= 0) {
element.defer = true;
element.unresolved = "AD_Role_ID";
return;
} }
Element taskElement = element.properties.get(I_AD_Task_Access.COLUMNNAME_AD_Task_ID); Element taskElement = element.properties.get(I_AD_Task_Access.COLUMNNAME_AD_Task_ID);
taskid = ReferenceUtils.resolveReference(ctx, taskElement, getTrxName(ctx)); taskid = ReferenceUtils.resolveReference(ctx.ctx, taskElement, getTrxName(ctx));
if (taskid <= 0) {
element.defer = true;
element.unresolved = "AD_Task_ID";
return;
}
Query query = new Query(ctx, "AD_Task_Access", "AD_Role_ID=? and AD_Task_ID=?", getTrxName(ctx)); Query query = new Query(ctx.ctx, "AD_Task_Access", "AD_Role_ID=? and AD_Task_ID=?", getTrxName(ctx));
po = query.setParameters(new Object[]{roleid, taskid}).first(); po = query.setParameters(new Object[]{roleid, taskid}).first();
if (po == null){ if (po == null){
po = new X_AD_Task_Access(ctx, 0, getTrxName(ctx)); po = new X_AD_Task_Access(ctx.ctx, 0, getTrxName(ctx));
po.setAD_Role_ID(roleid); po.setAD_Role_ID(roleid);
po.setAD_Task_ID(taskid); po.setAD_Task_ID(taskid);
} }
@ -70,35 +81,41 @@ public class TaskAccessElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
po.saveEx(); po.saveEx();
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Task_ID = Env.getContextAsInt(ctx, X_AD_Task.COLUMNNAME_AD_Task_ID); int AD_Task_ID = Env.getContextAsInt(ctx.ctx, X_AD_Task.COLUMNNAME_AD_Task_ID);
int AD_Role_ID = Env.getContextAsInt(ctx, X_AD_Role.COLUMNNAME_AD_Role_ID); int AD_Role_ID = Env.getContextAsInt(ctx.ctx, X_AD_Role.COLUMNNAME_AD_Role_ID);
Query query = new Query(ctx.ctx, "AD_Task_Access", "AD_Role_ID=? and AD_Task_ID=?", getTrxName(ctx));
X_AD_Task_Access po = query.setParameters(new Object[]{AD_Role_ID, AD_Task_ID}).first();
if (po != null) {
if (ctx.packOut.getFromDate() != null) {
if (po.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_Task_Access.Table_Name, atts); document.startElement("", "", I_AD_Task_Access.Table_Name, atts);
createTaskAccessBinding(ctx, document, AD_Task_ID, AD_Role_ID); createTaskAccessBinding(ctx, document, po);
document.endElement("", "", I_AD_Task_Access.Table_Name); document.endElement("", "", I_AD_Task_Access.Table_Name);
} }
}
private void createTaskAccessBinding(Properties ctx, TransformerHandler document, private void createTaskAccessBinding(PIPOContext ctx, TransformerHandler document,
int taskid, int roleid) { X_AD_Task_Access po) {
Query query = new Query(ctx, "AD_Task_Access", "AD_Role_ID=? and AD_Task_ID=?", getTrxName(ctx));
X_AD_Task_Access po = query.setParameters(new Object[]{roleid, taskid}).first();
if (po != null) {
PoExporter filler = new PoExporter(ctx, document, po); PoExporter filler = new PoExporter(ctx, document, po);
List<String> excludes = defaultExcludeList(X_AD_Task_Access.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Task_Access.Table_Name);
filler.export(excludes); filler.export(excludes);
} }
}
@Override @Override
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,

View File

@ -19,11 +19,11 @@ package org.adempiere.pipo2.handler;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -41,18 +41,18 @@ public class TaskElementHandler extends AbstractElementHandler {
private List<Integer> tasks = new ArrayList<Integer>(); private List<Integer> tasks = new ArrayList<Integer>();
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_Task.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Task.Table_Name);
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
MTask mTask = findPO(ctx, element); MTask mTask = findPO(ctx, element);
if (mTask == null) { if (mTask == null) {
String name = getStringValue(element, "Name"); String name = getStringValue(element, "Name");
int id = findIdByName(ctx, "AD_Task", name); int id = findIdByName(ctx, "AD_Task", name);
mTask = new MTask(ctx, id > 0 ? id : 0, getTrxName(ctx)); mTask = new MTask(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
} }
if (mTask.getAD_Task_ID() == 0 && isOfficialId(element, "AD_Task_ID")) if (mTask.getAD_Task_ID() == 0 && isOfficialId(element, "AD_Task_ID"))
@ -62,6 +62,7 @@ public class TaskElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -81,7 +82,7 @@ public class TaskElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, mTask.getName(), mTask.get_ID(), logImportDetail(ctx, impDetail, 0, mTask.getName(), mTask.get_ID(),
action); action);
throw new POSaveFailedException("Task"); throw new POSaveFailedException("Failed to save Task " + mTask.getName());
} }
} }
} else { } else {
@ -89,16 +90,21 @@ public class TaskElementHandler extends AbstractElementHandler {
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Task_ID = Env.getContextAsInt(ctx, "AD_Task_ID"); int AD_Task_ID = Env.getContextAsInt(ctx.ctx, "AD_Task_ID");
if (tasks.contains(AD_Task_ID)) if (tasks.contains(AD_Task_ID))
return; return;
tasks.add(AD_Task_ID); tasks.add(AD_Task_ID);
X_AD_Task m_Task = new X_AD_Task(ctx, AD_Task_ID, null); X_AD_Task m_Task = new X_AD_Task(ctx.ctx, AD_Task_ID, null);
if (ctx.packOut.getFromDate() != null) {
if (m_Task.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_Task.Table_Name, atts); document.startElement("", "", I_AD_Task.Table_Name, atts);
@ -107,7 +113,7 @@ public class TaskElementHandler extends AbstractElementHandler {
} }
private void createTaskBinding(Properties ctx, TransformerHandler document, private void createTaskBinding(PIPOContext ctx, TransformerHandler document,
X_AD_Task m_Task) { X_AD_Task m_Task) {
PoExporter filler = new PoExporter(ctx, document, m_Task); PoExporter filler = new PoExporter(ctx, document, m_Task);
List<String> excludes = defaultExcludeList(X_AD_Task.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Task.Table_Name);
@ -118,9 +124,9 @@ public class TaskElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Task.COLUMNNAME_AD_Task_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_Task.COLUMNNAME_AD_Task_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_Task.COLUMNNAME_AD_Task_ID); packout.getCtx().ctx.remove(X_AD_Task.COLUMNNAME_AD_Task_ID);
} }
} }

View File

@ -17,11 +17,11 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
@ -38,7 +38,8 @@ import org.xml.sax.helpers.AttributesImpl;
public class UserRoleElementHandler extends AbstractElementHandler { public class UserRoleElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element)
throws SAXException {
int roleid =0; int roleid =0;
int userid =0; int userid =0;
int orgid =0; int orgid =0;
@ -48,22 +49,34 @@ public class UserRoleElementHandler extends AbstractElementHandler {
X_AD_User_Roles po = findPO(ctx, element); X_AD_User_Roles po = findPO(ctx, element);
if (po == null) { if (po == null) {
Element userElement = element.properties.get(I_AD_User_Roles.COLUMNNAME_AD_User_ID); Element userElement = element.properties.get(I_AD_User_Roles.COLUMNNAME_AD_User_ID);
userid = ReferenceUtils.resolveReference(ctx, userElement, getTrxName(ctx)); userid = ReferenceUtils.resolveReference(ctx.ctx, userElement, getTrxName(ctx));
if (userid <= 0) {
if (getParentId(element, "role") > 0) { element.defer = true;
roleid = getParentId(element, "role"); element.unresolved = "AD_User_ID " + (userElement.contents != null ? userElement.contents.toString() : "");
return;
}
if (getParentId(element, X_AD_Role.Table_Name) > 0) {
roleid = getParentId(element, X_AD_Role.Table_Name);
} else { } else {
Element roleElement = element.properties.get(I_AD_User_Roles.COLUMNNAME_AD_Role_ID); Element roleElement = element.properties.get("AD_Role_ID");
roleid = ReferenceUtils.resolveReference(ctx, roleElement, getTrxName(ctx)); roleid = ReferenceUtils.resolveReference(ctx.ctx, roleElement,
getTrxName(ctx));
}
if (roleid <= 0)
{
element.defer = true;
element.unresolved = "AD_Role_ID";
return;
} }
Element orgElement = element.properties.get(I_AD_User_Roles.COLUMNNAME_AD_Org_ID); Element orgElement = element.properties.get(I_AD_User_Roles.COLUMNNAME_AD_Org_ID);
orgid = ReferenceUtils.resolveReference(ctx, orgElement, getTrxName(ctx)); orgid = ReferenceUtils.resolveReference(ctx.ctx, orgElement, getTrxName(ctx));
Query query = new Query(ctx, "AD_User_Roles", "AD_User_ID = ? AND AD_Role_ID = ? AND AD_Org_ID = ?", getTrxName(ctx)); Query query = new Query(ctx.ctx, "AD_User_Roles", "AD_User_ID = ? AND AD_Role_ID = ? AND AD_Org_ID = ?", getTrxName(ctx));
po = query.setParameters(new Object[]{userid, roleid, orgid}).first(); po = query.setParameters(new Object[]{userid, roleid, orgid}).first();
if (po == null) { if (po == null) {
po = new X_AD_User_Roles(ctx, 0, getTrxName(ctx)); po = new X_AD_User_Roles(ctx.ctx, 0, getTrxName(ctx));
po.setAD_Org_ID(orgid); po.setAD_Org_ID(orgid);
po.setAD_Role_ID(roleid); po.setAD_Role_ID(roleid);
po.setAD_User_ID(userid); po.setAD_User_ID(userid);
@ -76,33 +89,49 @@ public class UserRoleElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
po.saveEx(); po.saveEx();
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element)
throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_User_ID = Env.getContextAsInt(ctx, X_AD_User.COLUMNNAME_AD_User_ID); int AD_User_ID = Env.getContextAsInt(ctx.ctx, X_AD_User.COLUMNNAME_AD_User_ID);
int AD_Role_ID = Env.getContextAsInt(ctx, X_AD_Role.COLUMNNAME_AD_Role_ID); int AD_Role_ID = Env.getContextAsInt(ctx.ctx, X_AD_Role.COLUMNNAME_AD_Role_ID);
int AD_Org_ID = Env.getContextAsInt(ctx, "AD_Org_ID"); int AD_Org_ID = Env.getContextAsInt(ctx.ctx, "AD_Org_ID");
Query query = new Query(ctx.ctx, "AD_User_Roles",
"AD_User_ID = ? AND AD_Role_ID = ? AND AD_Org_ID = ?", getTrxName(ctx));
X_AD_User_Roles po = query.setParameters(
new Object[] { AD_User_ID, AD_Role_ID, AD_Org_ID }).first();
if (po != null) {
if (ctx.packOut.getFromDate() != null) {
if (po.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_User_Roles.Table_Name, atts); document.startElement("", "", I_AD_User_Roles.Table_Name, atts);
createUserAssignBinding(ctx, document, AD_User_ID,AD_Role_ID, AD_Org_ID); createUserAssignBinding(ctx, document, po);
document.endElement("", "", I_AD_User_Roles.Table_Name); document.endElement("", "", I_AD_User_Roles.Table_Name);
} }
}
private void createUserAssignBinding(Properties ctx, TransformerHandler document, private void createUserAssignBinding(PIPOContext ctx,
int user_id, int role_id, int org_id) { TransformerHandler document, X_AD_User_Roles po) {
Query query = new Query(ctx, "AD_User_Roles", "AD_User_ID = ? AND AD_Role_ID = ? AND AD_Org_ID = ?", getTrxName(ctx));
X_AD_User_Roles po = query.setParameters(new Object[]{user_id, role_id, org_id}).first();
PoExporter filler = new PoExporter(ctx, document, po); PoExporter filler = new PoExporter(ctx, document, po);
AttributesImpl orgRefAtts = new AttributesImpl();
String orgReference = ReferenceUtils.getTableReference("AD_Org", "Name", po.getAD_Org_ID(), orgRefAtts);
filler.addString("AD_Org_ID", orgReference, orgRefAtts);
List<String> excludes = defaultExcludeList(X_AD_User_Roles.Table_Name); List<String> excludes = defaultExcludeList(X_AD_User_Roles.Table_Name);
excludes.add("AD_Org_ID");
filler.export(excludes); filler.export(excludes);
} }

View File

@ -17,11 +17,11 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
@ -39,7 +39,7 @@ import org.xml.sax.helpers.AttributesImpl;
public class WindowAccessElementHandler extends AbstractElementHandler { public class WindowAccessElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
int roleid =0; int roleid =0;
int windowid =0; int windowid =0;
List<String> excludes = defaultExcludeList(X_AD_Window_Access.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Window_Access.Table_Name);
@ -50,24 +50,26 @@ public class WindowAccessElementHandler extends AbstractElementHandler {
roleid = getParentId(element, I_AD_Role.Table_Name); roleid = getParentId(element, I_AD_Role.Table_Name);
} else { } else {
Element roleElement = element.properties.get(I_AD_Window_Access.COLUMNNAME_AD_Role_ID); Element roleElement = element.properties.get(I_AD_Window_Access.COLUMNNAME_AD_Role_ID);
roleid = ReferenceUtils.resolveReference(ctx, roleElement, getTrxName(ctx)); roleid = ReferenceUtils.resolveReference(ctx.ctx, roleElement, getTrxName(ctx));
} }
if (roleid <= 0) { if (roleid <= 0) {
element.defer = true; element.defer = true;
element.unresolved = "AD_Role_ID";
return; return;
} }
Element windowElement = element.properties.get(I_AD_Window_Access.COLUMNNAME_AD_Window_ID); Element windowElement = element.properties.get(I_AD_Window_Access.COLUMNNAME_AD_Window_ID);
windowid = ReferenceUtils.resolveReference(ctx, windowElement, getTrxName(ctx)); windowid = ReferenceUtils.resolveReference(ctx.ctx, windowElement, getTrxName(ctx));
if (windowid <= 0) { if (windowid <= 0) {
element.defer = true; element.defer = true;
element.unresolved = "AD_Window_ID";
return; return;
} }
Query query = new Query(ctx, "AD_Window_Access", "AD_Role_ID=? and AD_Window_ID=?", getTrxName(ctx)); Query query = new Query(ctx.ctx, "AD_Window_Access", "AD_Role_ID=? and AD_Window_ID=?", getTrxName(ctx));
po = query.setParameters(new Object[]{roleid, windowid}).first(); po = query.setParameters(new Object[]{roleid, windowid}).first();
if (po == null) { if (po == null) {
po = new X_AD_Window_Access(ctx, 0, getTrxName(ctx)); po = new X_AD_Window_Access(ctx.ctx, 0, getTrxName(ctx));
po.setAD_Role_ID(roleid); po.setAD_Role_ID(roleid);
po.setAD_Window_ID(windowid); po.setAD_Window_ID(windowid);
} }
@ -76,30 +78,37 @@ public class WindowAccessElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
po.saveEx(); po.saveEx();
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Window_ID = Env.getContextAsInt(ctx, X_AD_Window.COLUMNNAME_AD_Window_ID); int AD_Window_ID = Env.getContextAsInt(ctx.ctx, X_AD_Window.COLUMNNAME_AD_Window_ID);
int AD_Role_ID = Env.getContextAsInt(ctx, X_AD_Role.COLUMNNAME_AD_Role_ID); int AD_Role_ID = Env.getContextAsInt(ctx.ctx, X_AD_Role.COLUMNNAME_AD_Role_ID);
Query query = new Query(ctx.ctx, "AD_Window_Access", "AD_Role_ID=? and AD_Window_ID=?", getTrxName(ctx));
X_AD_Window_Access po = query.setParameters(new Object[]{AD_Role_ID, AD_Window_ID}).first();
if (po != null) {
if (ctx.packOut.getFromDate() != null) {
if (po.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_Window_Access.Table_Name, atts); document.startElement("", "", I_AD_Window_Access.Table_Name, atts);
createWindowAccessBinding(ctx, document, AD_Window_ID, AD_Role_ID); createWindowAccessBinding(ctx, document, po);
document.endElement("", "", I_AD_Window_Access.Table_Name); document.endElement("", "", I_AD_Window_Access.Table_Name);
} }
}
private void createWindowAccessBinding(Properties ctx, TransformerHandler document, private void createWindowAccessBinding(PIPOContext ctx, TransformerHandler document,
int window_id, int role_id) { X_AD_Window_Access po) {
Query query = new Query(ctx, "AD_Window_Access", "AD_Role_ID=? and AD_Window_ID=?", getTrxName(ctx));
X_AD_Window_Access po = query.setParameters(new Object[]{role_id, window_id}).first();
PoExporter filler = new PoExporter(ctx, document, po); PoExporter filler = new PoExporter(ctx, document, po);
List<String> excludes = defaultExcludeList(X_AD_Window_Access.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Window_Access.Table_Name);

View File

@ -21,19 +21,21 @@ import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.ElementHandler; import org.adempiere.pipo2.ElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
import org.adempiere.pipo2.PoFiller; import org.adempiere.pipo2.PoFiller;
import org.adempiere.pipo2.exception.DatabaseAccessException; import org.adempiere.pipo2.exception.DatabaseAccessException;
import org.adempiere.pipo2.exception.POSaveFailedException; import org.adempiere.pipo2.exception.POSaveFailedException;
import org.compiere.model.I_AD_Color;
import org.compiere.model.I_AD_Image;
import org.compiere.model.I_AD_Window; import org.compiere.model.I_AD_Window;
import org.compiere.model.MWindow; import org.compiere.model.MWindow;
import org.compiere.model.X_AD_Package_Exp_Detail; import org.compiere.model.X_AD_Package_Exp_Detail;
@ -53,12 +55,12 @@ public class WindowElementHandler extends AbstractElementHandler {
private List<Integer> windows = new ArrayList<Integer>(); private List<Integer> windows = new ArrayList<Integer>();
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_Window.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Window.Table_Name);
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
MWindow mWindow = findPO(ctx, element); MWindow mWindow = findPO(ctx, element);
if (mWindow == null) { if (mWindow == null) {
String name = getStringValue(element, "Name", excludes); String name = getStringValue(element, "Name", excludes);
@ -67,7 +69,7 @@ public class WindowElementHandler extends AbstractElementHandler {
return; return;
} }
mWindow = new MWindow(ctx, id > 0 ? id : 0, getTrxName(ctx)); mWindow = new MWindow(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mWindow.setName(name); mWindow.setName(name);
} else { } else {
if (windows.contains(mWindow.getAD_Window_ID())) { if (windows.contains(mWindow.getAD_Window_ID())) {
@ -83,6 +85,7 @@ public class WindowElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -104,7 +107,7 @@ public class WindowElementHandler extends AbstractElementHandler {
} else { } else {
logImportDetail(ctx, impDetail, 0, mWindow.getName(), mWindow logImportDetail(ctx, impDetail, 0, mWindow.getName(), mWindow
.get_ID(), action); .get_ID(), action);
throw new POSaveFailedException("Window"); throw new POSaveFailedException("Failed to save Window " + mWindow.getName());
} }
} }
} else { } else {
@ -112,19 +115,48 @@ public class WindowElementHandler extends AbstractElementHandler {
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Window_ID = Env.getContextAsInt(ctx, "AD_Window_ID"); int AD_Window_ID = Env.getContextAsInt(ctx.ctx, "AD_Window_ID");
PackOut packOut = (PackOut) ctx.get("PackOutProcess"); PackOut packOut = ctx.packOut;
X_AD_Window m_Window = new X_AD_Window(ctx, AD_Window_ID, null); boolean createElement = true;
X_AD_Window m_Window = new X_AD_Window(ctx.ctx, AD_Window_ID, null);
if (ctx.packOut.getFromDate() != null) {
if (m_Window.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
createElement = false;
}
}
//export color
if (m_Window.getAD_Color_ID() > 0) {
ElementHandler handler = ctx.packOut.getHandler(I_AD_Color.Table_Name);
try {
handler.packOut(ctx.packOut, document, null, m_Window.getAD_Color_ID());
} catch (Exception e) {
throw new SAXException(e);
}
}
//export image
if (m_Window.getAD_Image_ID() > 0) {
ElementHandler handler = ctx.packOut.getHandler(I_AD_Image.Table_Name);
try {
handler.packOut(ctx.packOut, document, null, m_Window.getAD_Image_ID());
} catch (Exception e) {
throw new SAXException(e);
}
}
if (createElement) {
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_Window.Table_Name, atts); document.startElement("", "", I_AD_Window.Table_Name, atts);
createWindowBinding(ctx, document, m_Window); createWindowBinding(ctx, document, m_Window);
}
// Tab Tag // Tab Tag
String sql = "SELECT AD_Tab_ID, AD_Table_ID FROM AD_TAB WHERE AD_WINDOW_ID = " String sql = "SELECT AD_Tab_ID, AD_Table_ID FROM AD_TAB WHERE AD_WINDOW_ID = "
+ AD_Window_ID; + AD_Window_ID;
@ -153,10 +185,9 @@ public class WindowElementHandler extends AbstractElementHandler {
DB.close(rs, pstmt); DB.close(rs, pstmt);
} }
//TODO: export of ad_image and ad_color use if (createElement) {
document.endElement("", "", X_AD_Window.Table_Name);
// Loop tags. }
document.endElement("", "", I_AD_Window.Table_Name);
// Preference Tag // Preference Tag
sql = "SELECT AD_Preference_ID FROM AD_PREFERENCE WHERE AD_WINDOW_ID = ?"; sql = "SELECT AD_Preference_ID FROM AD_PREFERENCE WHERE AD_WINDOW_ID = ?";
@ -184,22 +215,22 @@ public class WindowElementHandler extends AbstractElementHandler {
} }
} }
private void createPreference(Properties ctx, TransformerHandler document, private void createPreference(PIPOContext ctx, TransformerHandler document,
int AD_Preference_ID) throws SAXException { int AD_Preference_ID) throws SAXException {
Env.setContext(ctx, X_AD_Preference.COLUMNNAME_AD_Preference_ID, Env.setContext(ctx.ctx, X_AD_Preference.COLUMNNAME_AD_Preference_ID,
AD_Preference_ID); AD_Preference_ID);
preferenceHandler.create(ctx, document); preferenceHandler.create(ctx, document);
ctx.remove(X_AD_Preference.COLUMNNAME_AD_Preference_ID); ctx.ctx.remove(X_AD_Preference.COLUMNNAME_AD_Preference_ID);
} }
private void createTab(Properties ctx, TransformerHandler document, private void createTab(PIPOContext ctx, TransformerHandler document,
int AD_Tab_ID) throws SAXException { int AD_Tab_ID) throws SAXException {
Env.setContext(ctx, X_AD_Tab.COLUMNNAME_AD_Tab_ID, AD_Tab_ID); Env.setContext(ctx.ctx, X_AD_Tab.COLUMNNAME_AD_Tab_ID, AD_Tab_ID);
tabHandler.create(ctx, document); tabHandler.create(ctx, document);
ctx.remove(X_AD_Tab.COLUMNNAME_AD_Tab_ID); ctx.ctx.remove(X_AD_Tab.COLUMNNAME_AD_Tab_ID);
} }
private void createWindowBinding(Properties ctx, TransformerHandler document, private void createWindowBinding(PIPOContext ctx, TransformerHandler document,
X_AD_Window m_Window) { X_AD_Window m_Window) {
PoExporter filler = new PoExporter(ctx, document, m_Window); PoExporter filler = new PoExporter(ctx, document, m_Window);
List<String> excludes = defaultExcludeList(X_AD_Window.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Window.Table_Name);
@ -212,8 +243,8 @@ public class WindowElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_Window_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Window_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Window_ID); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Window_ID);
} }
} }

View File

@ -17,11 +17,11 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
@ -34,32 +34,43 @@ import org.compiere.model.X_AD_Role;
import org.compiere.model.X_AD_Workflow; import org.compiere.model.X_AD_Workflow;
import org.compiere.model.X_AD_Workflow_Access; import org.compiere.model.X_AD_Workflow_Access;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.compiere.wf.MWorkflowAccess;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl; import org.xml.sax.helpers.AttributesImpl;
public class WorkflowAccessElementHandler extends AbstractElementHandler { public class WorkflowAccessElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
int roleid =0; int roleid =0;
int workflowid =0; int workflowid =0;
List<String> excludes = defaultExcludeList(X_AD_Workflow_Access.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Workflow_Access.Table_Name);
X_AD_Workflow_Access po = findPO(ctx, element); MWorkflowAccess po = findPO(ctx, element);
if (po == null) { if (po == null) {
if (getParentId(element, I_AD_Role.Table_Name) > 0) { if (getParentId(element, I_AD_Role.Table_Name) > 0) {
roleid = getParentId(element, I_AD_Role.Table_Name); roleid = getParentId(element, I_AD_Role.Table_Name);
} else { } else {
Element roleElement = element.properties.get(I_AD_Workflow_Access.COLUMNNAME_AD_Role_ID); Element roleElement = element.properties.get(I_AD_Workflow_Access.COLUMNNAME_AD_Role_ID);
roleid = ReferenceUtils.resolveReference(ctx, roleElement, getTrxName(ctx)); roleid = ReferenceUtils.resolveReference(ctx.ctx, roleElement, getTrxName(ctx));
}
if (roleid <= 0) {
element.defer = true;
element.unresolved = "AD_Role_ID";
return;
} }
Element wfElement = element.properties.get(I_AD_Workflow_Access.COLUMNNAME_AD_Workflow_ID); Element wfElement = element.properties.get(I_AD_Workflow_Access.COLUMNNAME_AD_Workflow_ID);
workflowid = ReferenceUtils.resolveReference(ctx, wfElement, getTrxName(ctx)); workflowid = ReferenceUtils.resolveReference(ctx.ctx, wfElement, getTrxName(ctx));
if (workflowid <= 0) {
element.defer = true;
element.unresolved = "AD_Workflow_ID";
}
Query query = new Query(ctx, "AD_Workflow_Access", "AD_Role_ID=? and AD_Workflow_ID=?", getTrxName(ctx)); Query query = new Query(ctx.ctx, "AD_Workflow_Access", "AD_Role_ID=? and AD_Workflow_ID=?", getTrxName(ctx));
po = query.setParameters(new Object[]{roleid, workflowid}).first(); po = query.setParameters(new Object[]{roleid, workflowid}).first();
if (po == null) { if (po == null) {
po = new X_AD_Workflow_Access(ctx, 0, getTrxName(ctx)); po = new MWorkflowAccess(ctx.ctx, 0, getTrxName(ctx));
po.setAD_Role_ID(roleid); po.setAD_Role_ID(roleid);
po.setAD_Workflow_ID(workflowid); po.setAD_Workflow_ID(workflowid);
} }
@ -71,31 +82,38 @@ public class WorkflowAccessElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
po.saveEx(); po.saveEx();
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Workflow_ID = Env.getContextAsInt(ctx, X_AD_Workflow.COLUMNNAME_AD_Workflow_ID); int AD_Workflow_ID = Env.getContextAsInt(ctx.ctx, X_AD_Workflow.COLUMNNAME_AD_Workflow_ID);
int AD_Role_ID = Env.getContextAsInt(ctx, X_AD_Role.COLUMNNAME_AD_Role_ID); int AD_Role_ID = Env.getContextAsInt(ctx.ctx, X_AD_Role.COLUMNNAME_AD_Role_ID);
MWorkflowAccess po = null;
Query query = new Query(ctx.ctx, "AD_Workflow_Access", "AD_Role_ID=? and AD_Workflow_ID=?", getTrxName(ctx));
po = query.setParameters(new Object[]{AD_Role_ID, AD_Workflow_ID}).first();
if (po != null) {
if (ctx.packOut.getFromDate() != null) {
if (po.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_Workflow_Access.Table_Name, atts); document.startElement("", "", I_AD_Workflow_Access.Table_Name, atts);
createWorkflowAccessBinding(ctx, document, AD_Workflow_ID, AD_Role_ID); createWorkflowAccessBinding(ctx, document, po);
document.endElement("", "", I_AD_Workflow_Access.Table_Name); document.endElement("", "", I_AD_Workflow_Access.Table_Name);
} }
}
private void createWorkflowAccessBinding(Properties ctx, TransformerHandler document, private void createWorkflowAccessBinding(PIPOContext ctx, TransformerHandler document,
int workflow_id, int role_id) { MWorkflowAccess po) {
X_AD_Workflow_Access po = null;
Query query = new Query(ctx, "AD_Workflow_Access", "AD_Role_ID=? and AD_Workflow_ID=?", getTrxName(ctx));
po = query.setParameters(new Object[]{role_id, workflow_id}).first();
PoExporter filler = new PoExporter(ctx, document, po); PoExporter filler = new PoExporter(ctx, document, po);
List<String> excludes = defaultExcludeList(X_AD_Workflow_Access.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Workflow_Access.Table_Name);

View File

@ -20,12 +20,12 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.exceptions.DBException; import org.adempiere.exceptions.DBException;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -52,12 +52,12 @@ public class WorkflowElementHandler extends AbstractElementHandler {
private List<Integer> workflows = new ArrayList<Integer>(); private List<Integer> workflows = new ArrayList<Integer>();
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_Workflow.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Workflow.Table_Name);
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
MWorkflow mWorkflow = findPO(ctx, element); MWorkflow mWorkflow = findPO(ctx, element);
if (mWorkflow == null) { if (mWorkflow == null) {
@ -68,7 +68,7 @@ public class WorkflowElementHandler extends AbstractElementHandler {
return; return;
} }
mWorkflow = new MWorkflow(ctx, id > 0 ? id : 0, getTrxName(ctx)); mWorkflow = new MWorkflow(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mWorkflow.setValue(workflowValue); mWorkflow.setValue(workflowValue);
} }
@ -78,6 +78,7 @@ public class WorkflowElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -102,7 +103,7 @@ public class WorkflowElementHandler extends AbstractElementHandler {
log.info("m_Workflow save failure"); log.info("m_Workflow save failure");
logImportDetail(ctx, impDetail, 0, mWorkflow.getName(), mWorkflow logImportDetail(ctx, impDetail, 0, mWorkflow.getName(), mWorkflow
.get_ID(), action); .get_ID(), action);
throw new POSaveFailedException("MWorkflow"); throw new POSaveFailedException("Failed to save MWorkflow " + mWorkflow.getName());
} }
} }
} else { } else {
@ -114,12 +115,12 @@ public class WorkflowElementHandler extends AbstractElementHandler {
* @param ctx * @param ctx
* @param element * @param element
*/ */
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
if (!element.defer && !element.skip && element.recordId > 0) { if (!element.defer && !element.skip && element.recordId > 0) {
//set start node //set start node
String value = getStringValue(element, "AD_WF_Node.Value"); String value = getStringValue(element, "AD_WF_Node.Value");
if (value != null && value.trim().length() > 0) { if (value != null && value.trim().length() > 0) {
MWorkflow m_Workflow = new MWorkflow(ctx, element.recordId, getTrxName(ctx)); MWorkflow m_Workflow = new MWorkflow(ctx.ctx, element.recordId, getTrxName(ctx));
int id = findIdByColumnAndParentId(ctx, "AD_WF_Node", "Value", value, "AD_Workflow", m_Workflow.getAD_Workflow_ID()); int id = findIdByColumnAndParentId(ctx, "AD_WF_Node", "Value", value, "AD_Workflow", m_Workflow.getAD_Workflow_ID());
if (id <= 0) { if (id <= 0) {
log.warning("Failed to resolve start node reference for workflow element. Workflow=" log.warning("Failed to resolve start node reference for workflow element. Workflow="
@ -141,15 +142,15 @@ public class WorkflowElementHandler extends AbstractElementHandler {
log.info("m_Workflow update fail"); log.info("m_Workflow update fail");
logImportDetail(ctx, impDetail, 0, m_Workflow.getName(), m_Workflow logImportDetail(ctx, impDetail, 0, m_Workflow.getName(), m_Workflow
.get_ID(), "Update"); .get_ID(), "Update");
throw new POSaveFailedException("MWorkflow"); throw new POSaveFailedException("Failed to save MWorkflow " + m_Workflow.getName());
} }
} }
} }
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_Workflow_ID = Env.getContextAsInt(ctx, int AD_Workflow_ID = Env.getContextAsInt(ctx.ctx,
X_AD_Package_Exp_Detail.COLUMNNAME_AD_Workflow_ID); X_AD_Package_Exp_Detail.COLUMNNAME_AD_Workflow_ID);
if (workflows.contains(AD_Workflow_ID)) if (workflows.contains(AD_Workflow_ID))
return; return;
@ -159,18 +160,30 @@ public class WorkflowElementHandler extends AbstractElementHandler {
int ad_wf_nodenextcondition_id = 0; int ad_wf_nodenextcondition_id = 0;
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
X_AD_Workflow m_Workflow = new X_AD_Workflow(ctx, boolean creatElement = true;
MWorkflow m_Workflow = new MWorkflow(ctx.ctx,
AD_Workflow_ID, null); AD_Workflow_ID, null);
if (ctx.packOut.getFromDate() != null) {
if (m_Workflow.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
creatElement = false;
}
}
if (creatElement) {
atts.addAttribute("", "", "type", "CDATA", "object"); atts.addAttribute("", "", "type", "CDATA", "object");
atts.addAttribute("", "", "type-name", "CDATA", "ad.workflow"); atts.addAttribute("", "", "type-name", "CDATA", "ad.workflow");
document.startElement("", "", I_AD_Workflow.Table_Name, atts); document.startElement("", "", I_AD_Workflow.Table_Name, atts);
createWorkflowBinding(ctx, document, m_Workflow); createWorkflowBinding(ctx, document, m_Workflow);
}
String sql = "SELECT AD_WF_Node_ID FROM AD_WF_Node WHERE AD_Workflow_ID = " String sql = "SELECT AD_WF_Node_ID FROM AD_WF_Node WHERE AD_Workflow_ID = "
+ AD_Workflow_ID; + AD_Workflow_ID;
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
PreparedStatement psNodeNext = null;
PreparedStatement psNCondition = null;
ResultSet rs = null; ResultSet rs = null;
ResultSet nodeNextrs = null;
ResultSet nodeNConditionrs = null;
try { try {
pstmt = DB.prepareStatement(sql, getTrxName(ctx)); pstmt = DB.prepareStatement(sql, getTrxName(ctx));
// Generated workflowNodeNext(s) and // Generated workflowNodeNext(s) and
@ -179,20 +192,18 @@ public class WorkflowElementHandler extends AbstractElementHandler {
while (rs.next()) { while (rs.next()) {
int nodeId = rs.getInt("AD_WF_Node_ID"); int nodeId = rs.getInt("AD_WF_Node_ID");
createNode(ctx, document, nodeId); createNode(ctx, document, nodeId);
sql = "SELECT ad_wf_nodenext_id from ad_wf_nodenext WHERE ad_wf_node_id =" +nodeId;
ad_wf_nodenext_id = 0; psNodeNext = DB.prepareStatement(sql, getTrxName(ctx));
nodeNextrs = psNodeNext.executeQuery();
sql = "SELECT ad_wf_nodenext_id from ad_wf_nodenext WHERE ad_wf_node_id = ?"; while (nodeNextrs.next()){
ad_wf_nodenext_id = DB.getSQLValue(null, sql, nodeId); ad_wf_nodenext_id = nodeNextrs.getInt("AD_WF_NodeNext_ID");
if (ad_wf_nodenext_id > 0) {
createNodeNext(ctx, document, ad_wf_nodenext_id); createNodeNext(ctx, document, ad_wf_nodenext_id);
sql = "SELECT ad_wf_nextcondition_id from ad_wf_nextcondition WHERE ad_wf_nodenext_id =" + ad_wf_nodenext_id;
ad_wf_nodenextcondition_id = 0; psNCondition = DB.prepareStatement(sql, getTrxName(ctx));
sql = "SELECT ad_wf_nextcondition_id from ad_wf_nextcondition WHERE ad_wf_nodenext_id = ?"; nodeNConditionrs = psNCondition.executeQuery();
ad_wf_nodenextcondition_id = DB.getSQLValue(null, sql, nodeId); while (nodeNConditionrs.next()) {
log.info("ad_wf_nodenextcondition_id: " ad_wf_nodenextcondition_id= nodeNConditionrs.getInt("AD_WF_NextCondition_ID");
+ String.valueOf(ad_wf_nodenextcondition_id)); log.info("ad_wf_nodenextcondition_id: "+ String.valueOf(ad_wf_nodenextcondition_id));
if (ad_wf_nodenextcondition_id > 0) {
createNodeNextCondition(ctx, document, ad_wf_nodenextcondition_id); createNodeNextCondition(ctx, document, ad_wf_nodenextcondition_id);
} }
} }
@ -201,37 +212,41 @@ public class WorkflowElementHandler extends AbstractElementHandler {
throw new DBException(e); throw new DBException(e);
} finally { } finally {
DB.close(rs, pstmt); DB.close(rs, pstmt);
document.endElement("", "", I_AD_Workflow.Table_Name); DB.close(nodeNextrs, psNodeNext);
DB.close(nodeNConditionrs,psNCondition);
if (creatElement) {
document.endElement("", "", MWorkflow.Table_Name);
}
} }
} }
private void createNodeNextCondition(Properties ctx, private void createNodeNextCondition(PIPOContext ctx,
TransformerHandler document, int ad_wf_nodenextcondition_id) TransformerHandler document, int ad_wf_nodenextcondition_id)
throws SAXException { throws SAXException {
Env.setContext(ctx, Env.setContext(ctx.ctx,
X_AD_WF_NextCondition.COLUMNNAME_AD_WF_NextCondition_ID, X_AD_WF_NextCondition.COLUMNNAME_AD_WF_NextCondition_ID,
ad_wf_nodenextcondition_id); ad_wf_nodenextcondition_id);
nextConditionHandler.create(ctx, document); nextConditionHandler.create(ctx, document);
ctx.remove(X_AD_WF_NextCondition.COLUMNNAME_AD_WF_NextCondition_ID); ctx.ctx.remove(X_AD_WF_NextCondition.COLUMNNAME_AD_WF_NextCondition_ID);
} }
private void createNodeNext(Properties ctx, TransformerHandler document, private void createNodeNext(PIPOContext ctx, TransformerHandler document,
int ad_wf_nodenext_id) throws SAXException { int ad_wf_nodenext_id) throws SAXException {
Env.setContext(ctx, X_AD_WF_NodeNext.COLUMNNAME_AD_WF_NodeNext_ID, Env.setContext(ctx.ctx, X_AD_WF_NodeNext.COLUMNNAME_AD_WF_NodeNext_ID,
ad_wf_nodenext_id); ad_wf_nodenext_id);
nodeNextHandler.create(ctx, document); nodeNextHandler.create(ctx, document);
ctx.remove(X_AD_WF_NodeNext.COLUMNNAME_AD_WF_NodeNext_ID); ctx.ctx.remove(X_AD_WF_NodeNext.COLUMNNAME_AD_WF_NodeNext_ID);
} }
private void createNode(Properties ctx, TransformerHandler document, private void createNode(PIPOContext ctx, TransformerHandler document,
int AD_WF_Node_ID) throws SAXException { int AD_WF_Node_ID) throws SAXException {
Env.setContext(ctx, X_AD_WF_Node.COLUMNNAME_AD_WF_Node_ID, Env.setContext(ctx.ctx, X_AD_WF_Node.COLUMNNAME_AD_WF_Node_ID,
AD_WF_Node_ID); AD_WF_Node_ID);
nodeHandler.create(ctx, document); nodeHandler.create(ctx, document);
ctx.remove(X_AD_WF_Node.COLUMNNAME_AD_WF_Node_ID); ctx.ctx.remove(X_AD_WF_Node.COLUMNNAME_AD_WF_Node_ID);
} }
private void createWorkflowBinding(Properties ctx, TransformerHandler document, X_AD_Workflow m_Workflow) { private void createWorkflowBinding(PIPOContext ctx, TransformerHandler document, MWorkflow m_Workflow) {
PoExporter filler = new PoExporter(ctx, document, m_Workflow); PoExporter filler = new PoExporter(ctx, document, m_Workflow);
List<String> excludes = defaultExcludeList(X_AD_Workflow.Table_Name); List<String> excludes = defaultExcludeList(X_AD_Workflow.Table_Name);
@ -244,8 +259,8 @@ public class WorkflowElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception public void packOut(PackOut packout, TransformerHandler packoutHandler, TransformerHandler docHandler,int recordId) throws Exception
{ {
Env.setContext(packout.getCtx(), X_AD_Package_Exp_Detail.COLUMNNAME_AD_Workflow_ID, recordId); Env.setContext(packout.getCtx().ctx, X_AD_Package_Exp_Detail.COLUMNNAME_AD_Workflow_ID, recordId);
this.create(packout.getCtx(), packoutHandler); this.create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Workflow_ID); packout.getCtx().ctx.remove(X_AD_Package_Exp_Detail.COLUMNNAME_AD_Workflow_ID);
} }
} }

View File

@ -18,11 +18,11 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -35,35 +35,37 @@ import org.compiere.model.X_AD_Package_Imp_Detail;
import org.compiere.model.X_AD_WF_Node; import org.compiere.model.X_AD_WF_Node;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.compiere.wf.MWFNode;
import org.compiere.wf.MWorkflow;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl; import org.xml.sax.helpers.AttributesImpl;
public class WorkflowNodeElementHandler extends AbstractElementHandler { public class WorkflowNodeElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_WF_Node.Table_Name); List<String> excludes = defaultExcludeList(X_AD_WF_Node.Table_Name);
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
if (isParentSkip(element, null)) { /*if (isParentSkip(element, null)) {
element.skip = true; element.skip = true;
return; return;
} }*/
if (isParentDefer(element, I_AD_Workflow.Table_Name)) { if (isParentDefer(element, MWorkflow.Table_Name)) {
element.unresolved = "Parent element mark as defer: " + getStringValue(element, "AD_Workflow.Value"); element.unresolved = "Parent element mark as defer: " + getStringValue(element, "AD_Workflow.Value");
element.defer = true; element.defer = true;
return; return;
} }
X_AD_WF_Node mWFNode = findPO(ctx, element); MWFNode mWFNode = findPO(ctx, element);
if (mWFNode == null) { if (mWFNode == null) {
int workflowId = 0; int workflowId = 0;
Element wfElement = element.properties.get(I_AD_WF_Node.COLUMNNAME_AD_Workflow_ID); Element wfElement = element.properties.get(I_AD_WF_Node.COLUMNNAME_AD_Workflow_ID);
if (getParentId(element, I_AD_Workflow.Table_Name) > 0) { if (getParentId(element, I_AD_Workflow.Table_Name) > 0) {
workflowId = getParentId(element, I_AD_Workflow.Table_Name); workflowId = getParentId(element, I_AD_Workflow.Table_Name);
} else { } else {
workflowId = ReferenceUtils.resolveReference(ctx, wfElement, getTrxName(ctx)); workflowId = ReferenceUtils.resolveReference(ctx.ctx, wfElement, getTrxName(ctx));
} }
if (workflowId <= 0) { if (workflowId <= 0) {
element.defer = true; element.defer = true;
@ -76,7 +78,7 @@ public class WorkflowNodeElementHandler extends AbstractElementHandler {
"SELECT AD_WF_Node_ID FROM AD_WF_Node WHERE AD_Workflow_ID=? and Value =?"); "SELECT AD_WF_Node_ID FROM AD_WF_Node WHERE AD_Workflow_ID=? and Value =?");
int id = DB.getSQLValue(getTrxName(ctx), sqlB.toString(), workflowId, workflowNodeValue); int id = DB.getSQLValue(getTrxName(ctx), sqlB.toString(), workflowId, workflowNodeValue);
mWFNode = new X_AD_WF_Node(ctx, id > 0 ? id : 0, getTrxName(ctx)); mWFNode = new MWFNode(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
mWFNode.setValue(workflowNodeValue); mWFNode.setValue(workflowNodeValue);
mWFNode.setAD_Workflow_ID(workflowId); mWFNode.setAD_Workflow_ID(workflowId);
excludes.add(I_AD_WF_Node.COLUMNNAME_AD_Workflow_ID); excludes.add(I_AD_WF_Node.COLUMNNAME_AD_Workflow_ID);
@ -87,6 +89,7 @@ public class WorkflowNodeElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -110,7 +113,7 @@ public class WorkflowNodeElementHandler extends AbstractElementHandler {
log.info("m_WFNode save failure"); log.info("m_WFNode save failure");
logImportDetail(ctx, impDetail, 0, mWFNode.getName(), mWFNode logImportDetail(ctx, impDetail, 0, mWFNode.getName(), mWFNode
.get_ID(), action); .get_ID(), action);
throw new POSaveFailedException("WorkflowNode"); throw new POSaveFailedException("Failed to save WorkflowNode " + mWFNode.getName());
} }
} }
} else { } else {
@ -118,25 +121,29 @@ public class WorkflowNodeElementHandler extends AbstractElementHandler {
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int AD_WF_Node_ID = Env.getContextAsInt(ctx, int AD_WF_Node_ID = Env.getContextAsInt(ctx.ctx,
X_AD_WF_Node.COLUMNNAME_AD_WF_Node_ID); X_AD_WF_Node.COLUMNNAME_AD_WF_Node_ID);
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
X_AD_WF_Node m_WF_Node = new X_AD_WF_Node(ctx, AD_WF_Node_ID, MWFNode m_WF_Node = new MWFNode(ctx.ctx, AD_WF_Node_ID,
getTrxName(ctx)); getTrxName(ctx));
if (ctx.packOut.getFromDate() != null) {
if (m_WF_Node.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_WF_Node.Table_Name, atts); document.startElement("", "", I_AD_WF_Node.Table_Name, atts);
createWorkflowNodeBinding(ctx, document, m_WF_Node); createWorkflowNodeBinding(ctx, document, m_WF_Node);
document.endElement("", "", I_AD_WF_Node.Table_Name); document.endElement("", "", I_AD_WF_Node.Table_Name);
} }
private void createWorkflowNodeBinding(Properties ctx, TransformerHandler document, private void createWorkflowNodeBinding(PIPOContext ctx, TransformerHandler document,
X_AD_WF_Node m_WF_Node) { MWFNode m_WF_Node) {
PoExporter filler = new PoExporter(ctx, document, m_WF_Node); PoExporter filler = new PoExporter(ctx, document, m_WF_Node);
List<String> excludes = defaultExcludeList(X_AD_WF_Node.Table_Name); List<String> excludes = defaultExcludeList(X_AD_WF_Node.Table_Name);
@ -150,8 +157,8 @@ public class WorkflowNodeElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
Env.setContext(packout.getCtx(), I_AD_WF_Node.COLUMNNAME_AD_WF_Node_ID, recordId); Env.setContext(packout.getCtx().ctx, I_AD_WF_Node.COLUMNNAME_AD_WF_Node_ID, recordId);
create(packout.getCtx(), packoutHandler); create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(I_AD_WF_Node.COLUMNNAME_AD_WF_Node_ID); packout.getCtx().ctx.remove(I_AD_WF_Node.COLUMNNAME_AD_WF_Node_ID);
} }
} }

View File

@ -17,11 +17,11 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -30,27 +30,30 @@ import org.adempiere.pipo2.ReferenceUtils;
import org.adempiere.pipo2.exception.POSaveFailedException; import org.adempiere.pipo2.exception.POSaveFailedException;
import org.compiere.model.I_AD_WF_NextCondition; import org.compiere.model.I_AD_WF_NextCondition;
import org.compiere.model.I_AD_Workflow; import org.compiere.model.I_AD_Workflow;
import org.compiere.model.MColumn;
import org.compiere.model.X_AD_Package_Imp_Detail; import org.compiere.model.X_AD_Package_Imp_Detail;
import org.compiere.model.X_AD_WF_NextCondition; import org.compiere.model.X_AD_WF_NextCondition;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.Env; import org.compiere.util.Env;
import org.compiere.wf.MWFNextCondition; import org.compiere.wf.MWFNextCondition;
import org.compiere.wf.MWFNode;
import org.compiere.wf.MWFNodeNext;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl; import org.xml.sax.helpers.AttributesImpl;
public class WorkflowNodeNextConditionElementHandler extends public class WorkflowNodeNextConditionElementHandler extends
AbstractElementHandler { AbstractElementHandler {
public void startElement(Properties ctx, Element element) public void startElement(PIPOContext ctx, Element element)
throws SAXException { throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_WF_NextCondition.Table_Name); List<String> excludes = defaultExcludeList(X_AD_WF_NextCondition.Table_Name);
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
if (isParentSkip(element, null)) { /* if (isParentSkip(element, null)) {
element.skip = true; element.skip = true;
return; return;
} }*/
MWFNextCondition mWFNodeNextCondition = findPO(ctx, element); MWFNextCondition mWFNodeNextCondition = findPO(ctx, element);
if (mWFNodeNextCondition == null) { if (mWFNodeNextCondition == null) {
@ -59,7 +62,7 @@ public class WorkflowNodeNextConditionElementHandler extends
if (getParentId(element, I_AD_Workflow.Table_Name) > 0) { if (getParentId(element, I_AD_Workflow.Table_Name) > 0) {
workflowId = getParentId(element, I_AD_Workflow.Table_Name); workflowId = getParentId(element, I_AD_Workflow.Table_Name);
} else { } else {
workflowId = ReferenceUtils.resolveReference(ctx, wfElement, getTrxName(ctx)); workflowId = ReferenceUtils.resolveReference(ctx.ctx, wfElement, getTrxName(ctx));
} }
if (workflowId <= 0) { if (workflowId <= 0) {
element.defer = true; element.defer = true;
@ -67,36 +70,20 @@ public class WorkflowNodeNextConditionElementHandler extends
return; return;
} }
int AD_WF_NodeNext_ID = 0; Element nextElement = element.properties.get("AD_WF_NodeNext_ID");
Element nodeNextElement = element.properties.get(I_AD_WF_NextCondition.COLUMNNAME_AD_WF_NodeNext_ID); int wfNodeNextId = ReferenceUtils.resolveReference(ctx.ctx, nextElement, getTrxName(ctx));
if (ReferenceUtils.isIDLookup(nodeNextElement) || ReferenceUtils.isUUIDLookup(nodeNextElement)) {
AD_WF_NodeNext_ID = ReferenceUtils.resolveReference(ctx, nodeNextElement, getTrxName(ctx));
} else {
Element wfnElement = element.properties.get("AD_WF_Node_ID");
int wfNodeId = ReferenceUtils.resolveReference(ctx, wfnElement, getTrxName(ctx));
if (wfNodeId <= 0) {
element.unresolved = "AD_WF_Node=" + wfnElement.contents;
element.defer = true;
return;
}
Element nextElement = element.properties.get("AD_WF_Next_ID");
int wfNodeNextId = ReferenceUtils.resolveReference(ctx, nextElement, getTrxName(ctx));
if (wfNodeNextId <= 0) { if (wfNodeNextId <= 0) {
element.unresolved = "AD_WF_Node=" + nextElement.contents; element.unresolved = "AD_WF_NodeNext=" + nextElement.contents;
element.defer = true; element.defer = true;
return; return;
} }
String sql = "SELECT AD_WF_NodeNext_ID FROM AD_WF_NodeNext WHERE AD_WF_Node_ID =? and AD_WF_Next_ID =?"; int seqNo = getIntValue(element, "SeqNo");
AD_WF_NodeNext_ID = DB.getSQLValue(getTrxName(ctx), sql, wfNodeId, wfNodeNextId); String sql = "SELECT AD_WF_NextCondition_ID FROM AD_WF_NextCondition WHERE AD_WF_NodeNext_ID =? AND SeqNo=?";
} int id = DB.getSQLValue(getTrxName(ctx), sql, new Object[] {wfNodeNextId, seqNo});
String sql = "SELECT AD_WF_NextCondition_ID FROM AD_WF_NextCondition WHERE AD_WF_NodeNext_ID =?"; mWFNodeNextCondition = new MWFNextCondition(ctx.ctx, id > 0 ? id : 0, getTrxName(ctx));
int id = DB.getSQLValue(getTrxName(ctx), sql, AD_WF_NodeNext_ID); mWFNodeNextCondition.setAD_WF_NodeNext_ID(wfNodeNextId);
mWFNodeNextCondition = new MWFNextCondition(ctx, id > 0 ? id : 0, getTrxName(ctx));
mWFNodeNextCondition.setAD_WF_NodeNext_ID(AD_WF_NodeNext_ID);
} }
PoFiller filler = new PoFiller(ctx, mWFNodeNextCondition, element, this); PoFiller filler = new PoFiller(ctx, mWFNodeNextCondition, element, this);
@ -107,9 +94,9 @@ public class WorkflowNodeNextConditionElementHandler extends
Element columnElement = element.properties.get("AD_Column_ID"); Element columnElement = element.properties.get("AD_Column_ID");
int columnId = 0; int columnId = 0;
if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement)) { if (ReferenceUtils.isIDLookup(columnElement) || ReferenceUtils.isUUIDLookup(columnElement)) {
columnId = ReferenceUtils.resolveReference(ctx, columnElement, getTrxName(ctx)); columnId = ReferenceUtils.resolveReference(ctx.ctx, columnElement, getTrxName(ctx));
} else { } else {
int AD_Table_ID = ReferenceUtils.resolveReference(ctx, tableElement, getTrxName(ctx)); int AD_Table_ID = ReferenceUtils.resolveReference(ctx.ctx, tableElement, getTrxName(ctx));
columnId = findIdByColumnAndParentId(ctx, "AD_Column", "ColumnName", columnElement.contents.toString(), "AD_Table", AD_Table_ID); columnId = findIdByColumnAndParentId(ctx, "AD_Column", "ColumnName", columnElement.contents.toString(), "AD_Table", AD_Table_ID);
} }
mWFNodeNextCondition.setAD_Column_ID(columnId); mWFNodeNextCondition.setAD_Column_ID(columnId);
@ -117,6 +104,7 @@ public class WorkflowNodeNextConditionElementHandler extends
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -149,7 +137,7 @@ public class WorkflowNodeNextConditionElementHandler extends
String.valueOf(mWFNodeNextCondition.get_ID()), String.valueOf(mWFNodeNextCondition.get_ID()),
mWFNodeNextCondition.get_ID(), mWFNodeNextCondition.get_ID(),
action); action);
throw new POSaveFailedException("WorkflowNodeNextCondition"); throw new POSaveFailedException("Failed to save WorkflowNodeNextCondition");
} }
} }
} else { } else {
@ -157,15 +145,19 @@ public class WorkflowNodeNextConditionElementHandler extends
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int ad_wf_nodenextcondition_id = Env.getContextAsInt(ctx, int ad_wf_nodenextcondition_id = Env.getContextAsInt(ctx.ctx, "AD_WF_NextCondition_ID");
X_AD_WF_NextCondition.COLUMNNAME_AD_WF_NextCondition_ID); MWFNextCondition m_WF_NodeNextCondition = new MWFNextCondition(
X_AD_WF_NextCondition m_WF_NodeNextCondition = new X_AD_WF_NextCondition( ctx.ctx, ad_wf_nodenextcondition_id, null);
ctx, ad_wf_nodenextcondition_id, null); if (ctx.packOut.getFromDate() != null) {
if (m_WF_NodeNextCondition.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_WF_NextCondition.Table_Name, atts); document.startElement("", "", I_AD_WF_NextCondition.Table_Name, atts);
@ -173,30 +165,34 @@ public class WorkflowNodeNextConditionElementHandler extends
document.endElement("", "", I_AD_WF_NextCondition.Table_Name); document.endElement("", "", I_AD_WF_NextCondition.Table_Name);
} }
private void createWorkflowNodeNextConditionBinding(Properties ctx, TransformerHandler document, X_AD_WF_NextCondition mWFNodeNextCondition) { private void createWorkflowNodeNextConditionBinding(PIPOContext ctx, TransformerHandler document, MWFNextCondition mWFNodeNextCondition) {
PoExporter filler = new PoExporter(ctx, document, mWFNodeNextCondition); PoExporter filler = new PoExporter(ctx, document, mWFNodeNextCondition);
List<String> excludes = defaultExcludeList(X_AD_WF_NextCondition.Table_Name); List<String> excludes = defaultExcludeList(X_AD_WF_NextCondition.Table_Name);
if (mWFNodeNextCondition.getAD_WF_NextCondition_ID() <= PackOut.MAX_OFFICIAL_ID) if (mWFNodeNextCondition.getAD_WF_NextCondition_ID() <= PackOut.MAX_OFFICIAL_ID)
filler.add("AD_WF_NextCondition_ID", new AttributesImpl()); filler.add("AD_WF_NextCondition_ID", new AttributesImpl());
int AD_workflow_ID = mWFNodeNextCondition.getAD_WF_NodeNext().getAD_WF_Node().getAD_Workflow_ID(); MWFNodeNext mWFNodeNext = new MWFNodeNext(ctx.ctx, mWFNodeNextCondition.getAD_WF_NodeNext_ID(), getTrxName(ctx));
MWFNode mWFNode = new MWFNode(ctx.ctx, mWFNodeNext.getAD_WF_Node_ID(), getTrxName(ctx));
int AD_workflow_ID = mWFNode.getAD_Workflow_ID();
AttributesImpl wfAttributes = new AttributesImpl(); AttributesImpl wfAttributes = new AttributesImpl();
String value = ReferenceUtils.getTableReference("AD_Workflow", "Value", AD_workflow_ID, wfAttributes); String value = ReferenceUtils.getTableReference("AD_Workflow", "Value", AD_workflow_ID, wfAttributes);
filler.addString("AD_Workflow_ID", value, wfAttributes); filler.addString("AD_Workflow_ID", value, wfAttributes);
int AD_WF_Node_ID = mWFNodeNextCondition.getAD_WF_NodeNext().getAD_WF_Node_ID(); int AD_WF_Node_ID = mWFNodeNext.getAD_WF_Node_ID();
AttributesImpl wfnAttributes = new AttributesImpl(); AttributesImpl wfnAttributes = new AttributesImpl();
value = ReferenceUtils.getTableReference("AD_WF_Node", "Value", AD_WF_Node_ID, wfnAttributes); value = ReferenceUtils.getTableReference("AD_WF_Node", "Value", AD_WF_Node_ID, wfnAttributes);
filler.addString("AD_WF_Node_ID", value, wfnAttributes); filler.addString("AD_WF_Node_ID", value, wfnAttributes);
int AD_WF_Next_ID = mWFNodeNextCondition.getAD_WF_NodeNext().getAD_WF_Next_ID(); int AD_WF_Next_ID = mWFNodeNext.getAD_WF_Next_ID();
AttributesImpl nextAttributes = new AttributesImpl(); AttributesImpl nextAttributes = new AttributesImpl();
value = ReferenceUtils.getTableReference("AD_WF_Node", "Value", AD_WF_Next_ID, nextAttributes); value = ReferenceUtils.getTableReference("AD_WF_Node", "Value", AD_WF_Next_ID, nextAttributes);
filler.addString("AD_WF_Next_ID", value, nextAttributes); filler.addString("AD_WF_Next_ID", value, nextAttributes);
if (mWFNodeNextCondition.getAD_Column_ID() > 0) { if (mWFNodeNextCondition.getAD_Column_ID() > 0) {
int AD_Table_ID = mWFNodeNextCondition.getAD_Column().getAD_Table_ID(); int AD_Column_ID = mWFNodeNextCondition.getAD_Column_ID();
MColumn mColumn = new MColumn(ctx.ctx, AD_Column_ID, getTrxName(ctx));
int AD_Table_ID = mColumn.getAD_Table_ID();
AttributesImpl tableAttributes = new AttributesImpl(); AttributesImpl tableAttributes = new AttributesImpl();
value = ReferenceUtils.getTableReference("AD_Table", "TableName", AD_Table_ID, tableAttributes); value = ReferenceUtils.getTableReference("AD_Table", "TableName", AD_Table_ID, tableAttributes);
filler.addString("AD_Table_ID", value, tableAttributes); filler.addString("AD_Table_ID", value, tableAttributes);
@ -209,9 +205,9 @@ public class WorkflowNodeNextConditionElementHandler extends
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
Env.setContext(packout.getCtx(), I_AD_WF_NextCondition.COLUMNNAME_AD_WF_NextCondition_ID, recordId); Env.setContext(packout.getCtx().ctx, I_AD_WF_NextCondition.COLUMNNAME_AD_WF_NextCondition_ID, recordId);
create(packout.getCtx(), packoutHandler); create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(I_AD_WF_NextCondition.COLUMNNAME_AD_WF_NextCondition_ID); packout.getCtx().ctx.remove(I_AD_WF_NextCondition.COLUMNNAME_AD_WF_NextCondition_ID);
} }
} }

View File

@ -17,11 +17,11 @@
package org.adempiere.pipo2.handler; package org.adempiere.pipo2.handler;
import java.util.List; import java.util.List;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.pipo2.AbstractElementHandler; import org.adempiere.pipo2.AbstractElementHandler;
import org.adempiere.pipo2.PIPOContext;
import org.adempiere.pipo2.PoExporter; import org.adempiere.pipo2.PoExporter;
import org.adempiere.pipo2.Element; import org.adempiere.pipo2.Element;
import org.adempiere.pipo2.PackOut; import org.adempiere.pipo2.PackOut;
@ -41,15 +41,15 @@ import org.xml.sax.helpers.AttributesImpl;
public class WorkflowNodeNextElementHandler extends AbstractElementHandler { public class WorkflowNodeNextElementHandler extends AbstractElementHandler {
public void startElement(Properties ctx, Element element) throws SAXException { public void startElement(PIPOContext ctx, Element element) throws SAXException {
List<String> excludes = defaultExcludeList(X_AD_WF_NodeNext.Table_Name); List<String> excludes = defaultExcludeList(MWFNodeNext.Table_Name);
String entitytype = getStringValue(element, "EntityType"); String entitytype = getStringValue(element, "EntityType");
if (isProcessElement(ctx, entitytype)) { if (isProcessElement(ctx.ctx, entitytype)) {
if (isParentSkip(element, null)) { /*if (isParentSkip(element, null)) {
element.skip = true; element.skip = true;
return; return;
} }*/
MWFNodeNext mWFNodeNext = findPO(ctx, element); MWFNodeNext mWFNodeNext = findPO(ctx, element);
if (mWFNodeNext == null) { if (mWFNodeNext == null) {
@ -58,7 +58,7 @@ public class WorkflowNodeNextElementHandler extends AbstractElementHandler {
if (getParentId(element, I_AD_Workflow.Table_Name) > 0) { if (getParentId(element, I_AD_Workflow.Table_Name) > 0) {
workflowId = getParentId(element, I_AD_Workflow.Table_Name); workflowId = getParentId(element, I_AD_Workflow.Table_Name);
} else { } else {
workflowId = ReferenceUtils.resolveReference(ctx, wfElement, getTrxName(ctx)); workflowId = ReferenceUtils.resolveReference(ctx.ctx, wfElement, getTrxName(ctx));
} }
if (workflowId <= 0) { if (workflowId <= 0) {
element.defer = true; element.defer = true;
@ -69,10 +69,10 @@ public class WorkflowNodeNextElementHandler extends AbstractElementHandler {
int wfNodeId = 0; int wfNodeId = 0;
Element wfnElement = element.properties.get(I_AD_WF_NodeNext.COLUMNNAME_AD_WF_Node_ID); Element wfnElement = element.properties.get(I_AD_WF_NodeNext.COLUMNNAME_AD_WF_Node_ID);
if (ReferenceUtils.isIDLookup(wfnElement) || ReferenceUtils.isUUIDLookup(wfnElement)) { if (ReferenceUtils.isIDLookup(wfnElement) || ReferenceUtils.isUUIDLookup(wfnElement)) {
wfNodeId = ReferenceUtils.resolveReference(ctx, wfnElement, getTrxName(ctx)); wfNodeId = ReferenceUtils.resolveReference(ctx.ctx, wfnElement, getTrxName(ctx));
} else { } else {
wfNodeId = DB.getSQLValue(getTrxName(ctx), "SELECT AD_WF_Node_Id FROM AD_WF_Node WHERE AD_Workflow_ID=? AND Value=? AND AD_Client_ID=?", wfNodeId = DB.getSQLValue(getTrxName(ctx), "SELECT AD_WF_Node_Id FROM AD_WF_Node WHERE AD_Workflow_ID=? AND Value=? AND AD_Client_ID=?",
workflowId, wfnElement.contents.toString(), Env.getAD_Client_ID(ctx)); workflowId, wfnElement.contents.toString(), Env.getAD_Client_ID(ctx.ctx));
} }
if (wfNodeId <= 0) { if (wfNodeId <= 0) {
element.defer = true; element.defer = true;
@ -83,10 +83,10 @@ public class WorkflowNodeNextElementHandler extends AbstractElementHandler {
int AD_WF_Next_ID = 0; int AD_WF_Next_ID = 0;
Element nextElement = element.properties.get(I_AD_WF_NodeNext.COLUMNNAME_AD_WF_Next_ID); Element nextElement = element.properties.get(I_AD_WF_NodeNext.COLUMNNAME_AD_WF_Next_ID);
if (ReferenceUtils.isIDLookup(nextElement) || ReferenceUtils.isUUIDLookup(nextElement)) { if (ReferenceUtils.isIDLookup(nextElement) || ReferenceUtils.isUUIDLookup(nextElement)) {
AD_WF_Next_ID = ReferenceUtils.resolveReference(ctx, nextElement, getTrxName(ctx)); AD_WF_Next_ID = ReferenceUtils.resolveReference(ctx.ctx, nextElement, getTrxName(ctx));
} else { } else {
AD_WF_Next_ID = DB.getSQLValue(getTrxName(ctx), "SELECT AD_WF_Node_Id FROM AD_WF_Node WHERE AD_Workflow_ID=? AND Value=? AND AD_Client_ID=?", AD_WF_Next_ID = DB.getSQLValue(getTrxName(ctx), "SELECT AD_WF_Node_Id FROM AD_WF_Node WHERE AD_Workflow_ID=? AND Value=? AND AD_Client_ID=?",
workflowId, nextElement.contents.toString(), Env.getAD_Client_ID(ctx)); workflowId, nextElement.contents.toString(), Env.getAD_Client_ID(ctx.ctx));
} }
if (AD_WF_Next_ID <= 0) { if (AD_WF_Next_ID <= 0) {
element.defer = true; element.defer = true;
@ -96,7 +96,7 @@ public class WorkflowNodeNextElementHandler extends AbstractElementHandler {
int AD_WF_NodeNext_ID = DB.getSQLValue(getTrxName(ctx), "SELECT AD_WF_NodeNext_ID FROM AD_WF_NodeNext WHERE AD_WF_Node_ID=? and AD_WF_NEXT_ID =?", wfNodeId, AD_WF_Next_ID); int AD_WF_NodeNext_ID = DB.getSQLValue(getTrxName(ctx), "SELECT AD_WF_NodeNext_ID FROM AD_WF_NodeNext WHERE AD_WF_Node_ID=? and AD_WF_NEXT_ID =?", wfNodeId, AD_WF_Next_ID);
mWFNodeNext = new MWFNodeNext(ctx, AD_WF_NodeNext_ID, getTrxName(ctx)); mWFNodeNext = new MWFNodeNext(ctx.ctx, AD_WF_NodeNext_ID, getTrxName(ctx));
mWFNodeNext.setAD_WF_Node_ID(wfNodeId); mWFNodeNext.setAD_WF_Node_ID(wfNodeId);
mWFNodeNext.setAD_WF_Next_ID(AD_WF_Next_ID); mWFNodeNext.setAD_WF_Next_ID(AD_WF_Next_ID);
} }
@ -108,6 +108,7 @@ public class WorkflowNodeNextElementHandler extends AbstractElementHandler {
List<String> notfounds = filler.autoFill(excludes); List<String> notfounds = filler.autoFill(excludes);
if (notfounds.size() > 0) { if (notfounds.size() > 0) {
element.defer = true; element.defer = true;
element.unresolved = notfounds.toString();
return; return;
} }
@ -127,7 +128,7 @@ public class WorkflowNodeNextElementHandler extends AbstractElementHandler {
} else{ } else{
log.info("m_WFNodeNext save failure"); log.info("m_WFNodeNext save failure");
logImportDetail (ctx, impDetail, 0, String.valueOf(mWFNodeNext.get_ID()), mWFNodeNext.get_ID(), action); logImportDetail (ctx, impDetail, 0, String.valueOf(mWFNodeNext.get_ID()), mWFNodeNext.get_ID(), action);
throw new POSaveFailedException("WorkflowNodeNext"); throw new POSaveFailedException("Failed to save WorkflowNodeNext");
} }
} }
} else { } else {
@ -135,14 +136,19 @@ public class WorkflowNodeNextElementHandler extends AbstractElementHandler {
} }
} }
public void endElement(Properties ctx, Element element) throws SAXException { public void endElement(PIPOContext ctx, Element element) throws SAXException {
} }
public void create(Properties ctx, TransformerHandler document) public void create(PIPOContext ctx, TransformerHandler document)
throws SAXException { throws SAXException {
int ad_wf_nodenext_id = Env.getContextAsInt(ctx, X_AD_WF_NodeNext.COLUMNNAME_AD_WF_NodeNext_ID); int ad_wf_nodenext_id = Env.getContextAsInt(ctx.ctx, "AD_WF_NodeNext_ID");
X_AD_WF_NodeNext m_WF_NodeNext = new X_AD_WF_NodeNext( MWFNodeNext m_WF_NodeNext = new MWFNodeNext(
ctx, ad_wf_nodenext_id, null); ctx.ctx, ad_wf_nodenext_id, null);
if (ctx.packOut.getFromDate() != null) {
if (m_WF_NodeNext.getUpdated().compareTo(ctx.packOut.getFromDate()) < 0) {
return;
}
}
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
addTypeName(atts, "table"); addTypeName(atts, "table");
document.startElement("", "", I_AD_WF_NodeNext.Table_Name, atts); document.startElement("", "", I_AD_WF_NodeNext.Table_Name, atts);
@ -151,8 +157,8 @@ public class WorkflowNodeNextElementHandler extends AbstractElementHandler {
} }
private void createWorkflowNodeNextBinding(Properties ctx, TransformerHandler document, private void createWorkflowNodeNextBinding(PIPOContext ctx, TransformerHandler document,
X_AD_WF_NodeNext m_WF_NodeNext) MWFNodeNext m_WF_NodeNext)
{ {
PoExporter filler = new PoExporter(ctx, document, m_WF_NodeNext); PoExporter filler = new PoExporter(ctx, document, m_WF_NodeNext);
@ -161,6 +167,9 @@ public class WorkflowNodeNextElementHandler extends AbstractElementHandler {
if (m_WF_NodeNext.getAD_WF_NodeNext_ID() <= PackOut.MAX_OFFICIAL_ID) if (m_WF_NodeNext.getAD_WF_NodeNext_ID() <= PackOut.MAX_OFFICIAL_ID)
filler.add("AD_WF_NodeNext_ID", new AttributesImpl()); filler.add("AD_WF_NodeNext_ID", new AttributesImpl());
int AD_Workflow_ID = DB.getSQLValue(getTrxName(ctx), "SELECT AD_Workflow_ID FROM AD_WF_Node WHERE AD_WF_Node_ID=?", m_WF_NodeNext.getAD_WF_Node_ID());
filler.addTableReference("AD_Workflow_ID", "AD_Workflow", "Value", AD_Workflow_ID, new AttributesImpl());
filler.export(excludes); filler.export(excludes);
} }
@ -168,8 +177,8 @@ public class WorkflowNodeNextElementHandler extends AbstractElementHandler {
public void packOut(PackOut packout, TransformerHandler packoutHandler, public void packOut(PackOut packout, TransformerHandler packoutHandler,
TransformerHandler docHandler, TransformerHandler docHandler,
int recordId) throws Exception { int recordId) throws Exception {
Env.setContext(packout.getCtx(), I_AD_WF_NodeNext.COLUMNNAME_AD_WF_NodeNext_ID, recordId); Env.setContext(packout.getCtx().ctx, I_AD_WF_NodeNext.COLUMNNAME_AD_WF_NodeNext_ID, recordId);
create(packout.getCtx(), packoutHandler); create(packout.getCtx(), packoutHandler);
packout.getCtx().remove(I_AD_WF_NodeNext.COLUMNNAME_AD_WF_NodeNext_ID); packout.getCtx().ctx.remove(I_AD_WF_NodeNext.COLUMNNAME_AD_WF_NodeNext_ID);
} }
} }

View File

@ -4,7 +4,9 @@ Bundle-Name: PiPo
Bundle-SymbolicName: org.adempiere.pipo;singleton:=true Bundle-SymbolicName: org.adempiere.pipo;singleton:=true
Bundle-Version: 1.0.0.qualifier Bundle-Version: 1.0.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: org.apache.tools.ant, Import-Package: org.apache.commons.codec;version="1.3.0",
org.apache.commons.codec.binary;version="1.3.0",
org.apache.tools.ant,
org.apache.tools.ant.taskdefs, org.apache.tools.ant.taskdefs,
org.apache.xerces.jaxp;version="2.9.0", org.apache.xerces.jaxp;version="2.9.0",
org.osgi.framework org.osgi.framework

View File

@ -61,8 +61,8 @@ public abstract class AbstractElementHandler implements ElementHandler {
* @param name * @param name
* *
*/ */
public int findIdByName (Properties ctx, String tableName, String name) { public int findIdByName (PIPOContext ctx, String tableName, String name) {
return IDFinder.findIdByName(tableName, name, getClientId(ctx), getTrxName(ctx)); return IDFinder.findIdByName(tableName, name, getClientId(ctx.ctx), ctx.trx.getTrxName());
} }
/** /**
@ -72,22 +72,25 @@ public abstract class AbstractElementHandler implements ElementHandler {
* @param columName * @param columName
* @param name * @param name
*/ */
public int findIdByColumn (Properties ctx, String tableName, String columnName, Object value) { public int findIdByColumn (PIPOContext ctx, String tableName, String columnName, Object value, boolean ignorecase) {
int id = 0; int id = 0;
if ("AD_Table".equals(tableName) && "TableName".equals(columnName) && value != null) { if ("AD_Table".equals(tableName) && "TableName".equals(columnName) && value != null) {
id = getPackIn(ctx).getTableId(value.toString()); id = ctx.packIn.getTableId(value.toString());
if (id <= 0) { if (id <= 0) {
id = IDFinder.findIdByColumn(tableName, columnName, value, getClientId(ctx), getTrxName(ctx)); id = IDFinder.findIdByColumn(tableName, columnName, value, getClientId(ctx.ctx), ignorecase, ctx.trx.getTrxName());
if (id > 0) { if (id > 0) {
getPackIn(ctx).addTable(value.toString(), id); ctx.packIn.addTable(value.toString(), id);
} }
} }
} else { } else {
id = IDFinder.findIdByColumn(tableName, columnName, value, getClientId(ctx), getTrxName(ctx)); id = IDFinder.findIdByColumn(tableName, columnName, value, getClientId(ctx.ctx), ignorecase, ctx.trx.getTrxName());
} }
return id; return id;
} }
public int findIdByColumn (PIPOContext ctx, String tableName, String columnName, Object value) {
return findIdByColumn (ctx, tableName, columnName, value, false);
}
/** /**
* @param ctx * @param ctx
* @param type * @param type
@ -95,17 +98,17 @@ public abstract class AbstractElementHandler implements ElementHandler {
* @param tableId * @param tableId
* @return X_AD_Package_Imp_Detail * @return X_AD_Package_Imp_Detail
*/ */
public X_AD_Package_Imp_Detail createImportDetail(Properties ctx, String type, String tableName, int tableId) { public X_AD_Package_Imp_Detail createImportDetail(PIPOContext ctx, String type, String tableName, int tableId) {
X_AD_Package_Imp_Detail impDetail = new X_AD_Package_Imp_Detail(ctx, 0, getTrxName(ctx)); X_AD_Package_Imp_Detail impDetail = new X_AD_Package_Imp_Detail(ctx.ctx, 0, ctx.trx.getTrxName());
impDetail.setAD_Package_Imp_ID(getPackageImpId(ctx)); impDetail.setAD_Package_Imp_ID(getPackageImpId(ctx.ctx));
impDetail.setAD_Org_ID(Env.getAD_Org_ID(ctx) ); impDetail.setAD_Org_ID(Env.getAD_Org_ID(ctx.ctx) );
impDetail.setType(type); impDetail.setType(type);
impDetail.setName(""); impDetail.setName("");
impDetail.setAction(""); impDetail.setAction("");
impDetail.setAD_Original_ID(1); impDetail.setAD_Original_ID(1);
impDetail.setTableName(tableName); impDetail.setTableName(tableName);
impDetail.setAD_Table_ID(tableId); impDetail.setAD_Table_ID(tableId);
impDetail.saveEx(getTrxName(ctx)); impDetail.saveEx(ctx.trx.getTrxName());
return impDetail; return impDetail;
} }
@ -122,33 +125,15 @@ public abstract class AbstractElementHandler implements ElementHandler {
* @throws SAXException * @throws SAXException
* *
*/ */
public void logImportDetail (Properties ctx, X_AD_Package_Imp_Detail detail, int success, String objectName, int objectID, public void logImportDetail (PIPOContext ctx, X_AD_Package_Imp_Detail detail, int success, String objectName, int objectID,
String action) throws SAXException{ String action) throws SAXException{
StringBuffer recordLayout = new StringBuffer();
TransformerHandler hd_document = getLogDocument(ctx);
AttributesImpl attsOut = new AttributesImpl();
String result = success == 1 ? "Success" : "Failure"; String result = success == 1 ? "Success" : "Failure";
//hd_documemt.startElement("","","Successful",attsOut);
recordLayout.append("Type:")
.append(detail.getType())
.append(" - Name:")
.append(objectName)
.append(" - ID:")
.append(objectID)
.append(" - Action:")
.append(action)
.append(" - " + result);
hd_document.startElement("","",result,attsOut);
hd_document.characters(recordLayout.toString().toCharArray(),0,recordLayout.length());
hd_document.endElement("","",result);
detail.setName(objectName); detail.setName(objectName);
detail.setAction(action); detail.setAction(action);
detail.setSuccess(result); detail.setSuccess(result);
detail.setAD_Original_ID(objectID); detail.setAD_Original_ID(objectID);
detail.saveEx(getTrxName(ctx)); ctx.packIn.addImportDetail(detail);
} }
/** /**
@ -159,8 +144,8 @@ public abstract class AbstractElementHandler implements ElementHandler {
* @param tableNameMaster * @param tableNameMaster
* @param nameMaster * @param nameMaster
*/ */
public int findIdByNameAndParentName (Properties ctx, String tableName, String name, String tableNameMaster, String nameMaster) { public int findIdByNameAndParentName (PIPOContext ctx, String tableName, String name, String tableNameMaster, String nameMaster) {
return IDFinder.findIdByNameAndParentName(tableName, name, tableNameMaster, nameMaster, getTrxName(ctx)); return IDFinder.findIdByNameAndParentName(tableName, name, tableNameMaster, nameMaster, getClientId(ctx.ctx), ctx.trx.getTrxName());
} }
/** /**
@ -172,9 +157,23 @@ public abstract class AbstractElementHandler implements ElementHandler {
* @param nameMaster * @param nameMaster
*/ */
public int findIdByColumnAndParentId (Properties ctx, String tableName, String columnName, String name, String tableNameMaster, int masterID) { public int findIdByColumnAndParentId (PIPOContext ctx, String tableName, String columnName, String name, String tableNameMaster, int masterID) {
return IDFinder.findIdByColumnAndParentId(tableName, columnName, name, tableNameMaster, masterID, return IDFinder.findIdByColumnAndParentId(tableName, columnName, name, tableNameMaster, masterID, getClientId(ctx.ctx),
getTrxName(ctx)); ctx.trx.getTrxName());
}
/**
* Get ID from column value for a table with a parent id reference.
*
* @param tableName
* @param name
* @param tableNameMaster
* @param nameMaster
* @param ignoreCase
*/
public int findIdByColumnAndParentId (PIPOContext ctx, String tableName, String columnName, String name, String tableNameMaster, int masterID, boolean ignoreCase) {
return IDFinder.findIdByColumnAndParentId(tableName, columnName, name, tableNameMaster, masterID, getClientId(ctx.ctx),
ignoreCase, ctx.trx.getTrxName());
} }
/** /**
@ -185,8 +184,8 @@ public abstract class AbstractElementHandler implements ElementHandler {
* @param tableNameMaster * @param tableNameMaster
* @param masterID * @param masterID
*/ */
public int findIdByNameAndParentId (Properties ctx, String tableName, String name, String tableNameMaster, int masterID) { public int findIdByNameAndParentId (PIPOContext ctx, String tableName, String name, String tableNameMaster, int masterID) {
return IDFinder.findIdByNameAndParentId(tableName, name, tableNameMaster, masterID, getTrxName(ctx)); return IDFinder.findIdByNameAndParentId(tableName, name, tableNameMaster, masterID, getClientId(ctx.ctx), ctx.trx.getTrxName());
} }
/** /**
@ -198,18 +197,19 @@ public abstract class AbstractElementHandler implements ElementHandler {
* *
*/ */
public void backupRecord(Properties ctx, int AD_Package_Imp_Detail_ID, String tableName,PO from){ public void backupRecord(PIPOContext ctx, int AD_Package_Imp_Detail_ID, String tableName,PO from){
// Create new record // Create new record
int tableID = findIdByColumn(ctx, "AD_Table", "TableName", tableName); int tableID = findIdByColumn(ctx, "AD_Table", "TableName", tableName);
POInfo poInfo = POInfo.getPOInfo(ctx, tableID, getTrxName(ctx)); POInfo poInfo = POInfo.getPOInfo(ctx.ctx, tableID);
PreparedStatement pstmtReferenceId = DB.prepareStatement("SELECT AD_Reference_ID FROM AD_COLUMN WHERE AD_Column_ID = ?", getTrxName(ctx)); PreparedStatement pstmtReferenceId = DB.prepareStatement("SELECT AD_Reference_ID FROM AD_COLUMN WHERE AD_Column_ID = ?", ctx.trx.getTrxName());
ResultSet rs=null; ResultSet rs=null;
try{ try{
for (int i = 0; i < poInfo.getColumnCount(); i++){ for (int i = 0; i < poInfo.getColumnCount(); i++){
if (from.is_ValueChanged(i)) {
int columnID =findIdByColumnAndParentId (ctx, "AD_Column", "ColumnName", poInfo.getColumnName(i), "AD_Table", tableID); int columnID =findIdByColumnAndParentId (ctx, "AD_Column", "ColumnName", poInfo.getColumnName(i), "AD_Table", tableID);
int referenceID=0; int referenceID=0;
@ -220,9 +220,9 @@ public abstract class AbstractElementHandler implements ElementHandler {
if (rs.next()) if (rs.next())
referenceID = rs.getInt(1); referenceID = rs.getInt(1);
X_AD_Package_Imp_Backup backup = new X_AD_Package_Imp_Backup(ctx, 0, getTrxName(ctx)); X_AD_Package_Imp_Backup backup = new X_AD_Package_Imp_Backup(ctx.ctx, 0, ctx.trx.getTrxName());
backup.setAD_Org_ID(Env.getAD_Org_ID(ctx)); backup.setAD_Org_ID(Env.getAD_Org_ID(ctx.ctx));
backup.setAD_Package_Imp_ID(getPackageImpId(ctx)); backup.setAD_Package_Imp_ID(getPackageImpId(ctx.ctx));
backup.setAD_Package_Imp_Detail_ID(AD_Package_Imp_Detail_ID); backup.setAD_Package_Imp_Detail_ID(AD_Package_Imp_Detail_ID);
backup.setAD_Table_ID(tableID); backup.setAD_Table_ID(tableID);
@ -231,7 +231,8 @@ public abstract class AbstractElementHandler implements ElementHandler {
Object value = from.get_ValueOld(i); Object value = from.get_ValueOld(i);
backup.setColValue(value != null ? value.toString() : null); backup.setColValue(value != null ? value.toString() : null);
backup.saveEx(getTrxName(ctx)); backup.saveEx();
}
} }
} }
catch(Exception e) catch(Exception e)
@ -306,7 +307,7 @@ public abstract class AbstractElementHandler implements ElementHandler {
} }
source.close(); source.close();
target.close(); target.close();
//System.out.println("Successfully copied " + byteCount + " bytes."); log.finer("Successfully copied " + byteCount + " bytes.");
} }
catch (Exception e) { catch (Exception e) {
log.log(Level.SEVERE, e.getLocalizedMessage(), e); log.log(Level.SEVERE, e.getLocalizedMessage(), e);
@ -347,21 +348,8 @@ public abstract class AbstractElementHandler implements ElementHandler {
* @param ctx * @param ctx
* @return transaction name * @return transaction name
*/ */
protected String getTrxName(Properties ctx) { protected String getTrxName(PIPOContext ctx) {
String trxName = Env.getContext(ctx, "TrxName"); return ctx.trx != null ? ctx.trx.getTrxName() : null;
if (trxName != null && trxName.trim().length() > 0)
return trxName;
else
return null;
}
/**
* Get share document
* @param ctx
* @return TransformerHandler
*/
protected TransformerHandler getLogDocument(Properties ctx) {
return (TransformerHandler)ctx.get("LogDocument");
} }
/** /**
@ -472,24 +460,6 @@ public abstract class AbstractElementHandler implements ElementHandler {
return excludes; return excludes;
} }
/**
*
* @param ctx
* @return PackIn instance
*/
protected PackIn getPackIn(Properties ctx) {
return (PackIn)ctx.get(PackInHandler.PACK_IN_PROCESS_CTX_KEY);
}
/**
*
* @param ctx
* @return PackOut instance
*/
protected PackOut getPackOut(Properties ctx) {
return (PackOut) ctx.get(PackOut.PACK_OUT_PROCESS_CTX_KEY);
}
/** /**
* *
* @param element * @param element
@ -582,7 +552,7 @@ public abstract class AbstractElementHandler implements ElementHandler {
* @param element * @param element
* @return T * @return T
*/ */
protected <T extends PO> T findPO(Properties ctx, Element element) { protected <T extends PO> T findPO(PIPOContext ctx, Element element) {
T po = null; T po = null;
String tableName = element.getElementValue(); String tableName = element.getElementValue();
String uuidColumn = PO.getUUIDColumnName(tableName); String uuidColumn = PO.getUUIDColumnName(tableName);
@ -590,13 +560,15 @@ public abstract class AbstractElementHandler implements ElementHandler {
if (element.properties.containsKey(uuidColumn)) { if (element.properties.containsKey(uuidColumn)) {
String uuid = element.properties.get(uuidColumn).contents.toString(); String uuid = element.properties.get(uuidColumn).contents.toString();
if (uuid != null && uuid.trim().length() == 36) { if (uuid != null && uuid.trim().length() == 36) {
Query query = new Query(ctx, tableName, uuidColumn+"=?", getTrxName(ctx)); Query query = new Query(ctx.ctx, tableName, uuidColumn+"=?", ctx.trx.getTrxName());
po = query.setParameters(uuid.trim()).firstOnly(); po = query.setParameters(uuid.trim()).firstOnly();
} }
} else if (element.properties.containsKey(idColumn)) { }
if (po == null && element.properties.containsKey(idColumn)) {
String id = element.properties.get(idColumn).contents.toString(); String id = element.properties.get(idColumn).contents.toString();
if (id != null && id.trim().length() > 0) { if (id != null && id.trim().length() > 0) {
Query query = new Query(ctx, tableName, idColumn+"=?", getTrxName(ctx)); Query query = new Query(ctx.ctx, tableName, idColumn+"=?", ctx.trx.getTrxName());
po = query.setParameters(id.trim()).firstOnly(); po = query.setParameters(id.trim()).firstOnly();
} }
} }

View File

@ -16,8 +16,6 @@
*****************************************************************************/ *****************************************************************************/
package org.adempiere.pipo2; package org.adempiere.pipo2;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
@ -35,7 +33,7 @@ public interface ElementHandler {
* @param element * @param element
* @throws org.xml.sax.SAXException * @throws org.xml.sax.SAXException
*/ */
public void startElement (Properties ctx, Element element) public void startElement (PIPOContext ctx, Element element)
throws org.xml.sax.SAXException; throws org.xml.sax.SAXException;
/** /**
@ -44,7 +42,7 @@ public interface ElementHandler {
* @param element * @param element
* @throws SAXException * @throws SAXException
*/ */
public void endElement (Properties ctx, Element element) throws SAXException; public void endElement (PIPOContext ctx, Element element) throws SAXException;
/** /**
* @param packout * @param packout

View File

@ -16,14 +16,24 @@
*****************************************************************************/ *****************************************************************************/
package org.adempiere.pipo2; package org.adempiere.pipo2;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.adempiere.pipo2.exception.DatabaseAccessException; import org.adempiere.pipo2.exception.DatabaseAccessException;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;
import org.compiere.model.MColumn;
import org.compiere.model.MTable;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.DisplayType;
import org.compiere.util.Env; import org.compiere.util.Env;
/** /**
@ -46,7 +56,7 @@ public class IDFinder {
* @param AD_Client_ID * @param AD_Client_ID
* @param trxName * @param trxName
*/ */
public static int findIdByColumn (String tableName, String columnName, Object value, int AD_Client_ID, String trxName) { public static int findIdByColumn (String tableName, String columnName, Object value, int AD_Client_ID, boolean ignorecase, String trxName) {
int id = 0; int id = 0;
if (value == null) if (value == null)
@ -70,24 +80,81 @@ public class IDFinder {
.append("_ID FROM ") .append("_ID FROM ")
.append(tableName) .append(tableName)
.append(" WHERE ") .append(" WHERE ")
.append(columnName) .append(" AD_Client_ID IN (0, ?) AND ");
.append(" = ?")
.append(" AND AD_Client_ID IN (0, ?)") Object[] params = null;
.append(" Order By AD_Client_ID Desc, ") String[] columns = null;
if (columnName.indexOf(",") > 0 && value instanceof String) {
columns = columnName.split("[,]");
String[] values = ((String)value).split("[,]");
List<Object> paramList = new ArrayList<Object>();
for (int i = 0; i < columns.length; i++) {
if (i > 0)
sqlB.append(" AND ");
if (ignorecase) {
sqlB.append("UPPER(").append(columns[i]).append(")=? ");
} else {
sqlB.append(columns[i]).append("=? ");
}
try {
byte[] bytes = Hex.decodeHex(values[i].toCharArray());
String s = new String(bytes, "UTF-8");
if (ignorecase) {
paramList.add(s.toUpperCase());
} else {
paramList.add(s);
}
} catch (DecoderException e) {
throw new RuntimeException(e);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
params = paramList.toArray();
} else {
if (ignorecase && value != null && value instanceof String) {
sqlB.append("UPPER(").append(columnName).append(") =? ");
params = new Object[]{ ((String)value).toUpperCase()};
} else {
sqlB.append(columnName).append(" =? ");
params = new Object[]{value};
}
columns = new String[]{columnName};
}
sqlB.append(" Order By AD_Client_ID Desc, ")
.append(tableName) .append(tableName)
.append("_ID"); .append("_ID");
MTable table = MTable.get(Env.getCtx(), tableName);
PreparedStatement pstmt = null; PreparedStatement pstmt = null;
ResultSet rs = null; ResultSet rs = null;
try { try {
pstmt = DB.prepareStatement(sqlB.toString(), trxName); pstmt = DB.prepareStatement(sqlB.toString(), trxName);
if (value instanceof String) pstmt.setInt(1, AD_Client_ID);
pstmt.setString(1, (String)value); for (int i = 0; i < params.length; i++) {
else if (value instanceof Integer) Object param = params[i];
pstmt.setInt(1, ((Integer)value).intValue()); if (param instanceof String) {
String s = (String)param;
MColumn column = table.getColumn(columns[i]);
if (column.getAD_Reference_ID() == DisplayType.Amount
|| column.getAD_Reference_ID() == DisplayType.Number
|| column.getAD_Reference_ID() == DisplayType.CostPrice
|| column.getAD_Reference_ID() == DisplayType.Quantity)
pstmt.setBigDecimal(i+2, new BigDecimal(s));
else if (column.getAD_Reference_ID() == DisplayType.Date
|| column.getAD_Reference_ID() == DisplayType.DateTime)
pstmt.setTimestamp(i+2, Timestamp.valueOf(s));
else if (column.getAD_Reference_ID() == DisplayType.Integer)
pstmt.setInt(i+2, Integer.parseInt(s));
else else
pstmt.setObject(1, value); pstmt.setString(i+2, s);
pstmt.setInt(2, AD_Client_ID); } else if (param instanceof Integer) {
pstmt.setInt(i+2, ((Integer)param).intValue());
} else {
pstmt.setObject(i+2, param);
}
}
rs = pstmt.executeQuery(); rs = pstmt.executeQuery();
if (rs.next()) if (rs.next())
@ -106,6 +173,10 @@ public class IDFinder {
return id; return id;
} }
public static int findIdByColumn(String tableName, String columnName, Object value, int clientId, String trxName) {
return findIdByColumn(tableName, columnName, value, clientId, false, trxName);
}
/** /**
* Get ID from Name for a table with a parent name reference. * Get ID from Name for a table with a parent name reference.
* *
@ -115,7 +186,7 @@ public class IDFinder {
* @param nameMaster * @param nameMaster
* @param trxName * @param trxName
*/ */
public static int findIdByNameAndParentName (String tableName, String name, String tableNameMaster, String nameMaster, String trxName) { public static int findIdByNameAndParentName (String tableName, String name, String tableNameMaster, String nameMaster, int AD_Client_ID, String trxName) {
int id = 0; int id = 0;
//construct cache key //construct cache key
StringBuffer key = new StringBuffer(); StringBuffer key = new StringBuffer();
@ -179,10 +250,24 @@ public class IDFinder {
* @param name * @param name
* @param tableNameMaster * @param tableNameMaster
* @param masterID * @param masterID
* @param trx
*/
public static int findIdByColumnAndParentId (String tableName, String columnName, String name, String tableNameMaster, int masterID, int AD_Client_ID, String trxName) {
return findIdByColumnAndParentId(tableName, columnName, name, tableNameMaster, masterID, AD_Client_ID, false, trxName);
}
/**
* Get ID from column value for a table with a parent id reference.
*
* @param tableName
* @param name
* @param tableNameMaster
* @param masterID
* @param trxName * @param trxName
*/ */
public static int findIdByColumnAndParentId (String tableName, String columnName, String name, String tableNameMaster, int masterID, String trxName) { public static int findIdByColumnAndParentId (String tableName, String columnName, String name, String tableNameMaster, int masterID, int AD_Client_ID, boolean ignoreCase, String trxName) {
int id = 0; int id = 0;
//check cache //check cache
@ -195,10 +280,16 @@ public class IDFinder {
.append(tableName) .append(tableName)
.append("_ID FROM ") .append("_ID FROM ")
.append(tableName) .append(tableName)
.append(" WHERE ") .append(" WHERE ");
if (ignoreCase) {
sqlB.append("Upper(")
.append(columnName) .append(columnName)
.append(" = ? and ") .append(") = ? and ");
.append(tableNameMaster+"_ID = ? AND AD_Client_ID IN (0, ?) ") } else {
sqlB.append(columnName)
.append(" = ? and ");
}
sqlB.append(tableNameMaster+"_ID = ? AND AD_Client_ID IN (0, ?) ")
.append("ORDER BY AD_Client_ID Desc "); .append("ORDER BY AD_Client_ID Desc ");
log.info(sqlB.toString()); log.info(sqlB.toString());
@ -208,9 +299,13 @@ public class IDFinder {
try { try {
pstmt = DB.prepareStatement(sqlB.toString(), trxName); pstmt = DB.prepareStatement(sqlB.toString(), trxName);
if (ignoreCase) {
pstmt.setString(1, name.toUpperCase());
} else {
pstmt.setString(1, name); pstmt.setString(1, name);
}
pstmt.setInt(2, masterID); pstmt.setInt(2, masterID);
pstmt.setInt(3, Env.getAD_Client_ID(Env.getCtx())); pstmt.setInt(3, AD_Client_ID);
rs = pstmt.executeQuery(); rs = pstmt.executeQuery();
if (rs.next()) if (rs.next())
{ {
@ -239,7 +334,7 @@ public class IDFinder {
* @param masterID * @param masterID
* @param trxName * @param trxName
*/ */
public static int findIdByNameAndParentId (String tableName, String name, String tableNameMaster, int masterID, String trxName) { public static int findIdByNameAndParentId (String tableName, String name, String tableNameMaster, int masterID, int AD_Client_ID, String trxName) {
int id = 0; int id = 0;
//construct cache key //construct cache key
@ -273,7 +368,7 @@ public class IDFinder {
pstmt = DB.prepareStatement(sqlB.toString(), trxName); pstmt = DB.prepareStatement(sqlB.toString(), trxName);
pstmt.setString(1, name); pstmt.setString(1, name);
pstmt.setInt(2, masterID); pstmt.setInt(2, masterID);
pstmt.setInt(3, Env.getAD_Client_ID(Env.getCtx())); pstmt.setInt(3, AD_Client_ID);
rs = pstmt.executeQuery(); rs = pstmt.executeQuery();
if (rs.next()) if (rs.next())
id = rs.getInt(1); id = rs.getInt(1);

View File

@ -0,0 +1,15 @@
package org.adempiere.pipo2;
import java.util.Properties;
import javax.xml.transform.sax.TransformerHandler;
import org.compiere.util.Trx;
public class PIPOContext {
public Properties ctx;
public Trx trx;
public PackIn packIn;
public PackOut packOut;
public TransformerHandler logDocument;
}

View File

@ -23,7 +23,9 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
@ -31,7 +33,10 @@ import java.util.logging.Level;
import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory; import javax.xml.parsers.SAXParserFactory;
import org.compiere.model.PO;
import org.compiere.model.X_AD_Package_Imp_Detail;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.Trx;
/** /**
* IntPackIn Tool. * IntPackIn Tool.
@ -51,6 +56,8 @@ public class PackIn {
private String packageName = null; private String packageName = null;
private String packageVersion = null; private String packageVersion = null;
private List<X_AD_Package_Imp_Detail> importDetails;
public PackIn() { public PackIn() {
super(); super();
} }
@ -123,6 +130,10 @@ public class PackIn {
} }
} }
public void addImportDetail(X_AD_Package_Imp_Detail importDetail) {
importDetails.add(importDetail);
}
/** /**
* *
* @param input * @param input
@ -135,20 +146,29 @@ public class PackIn {
log.info("starting"); log.info("starting");
// clear cache of previous runs // clear cache of previous runs
IDFinder.clearIDCache(); IDFinder.clearIDCache();
importDetails = new ArrayList<X_AD_Package_Imp_Detail>();
System.setProperty("javax.xml.parsers.SAXParserFactory", System.setProperty("javax.xml.parsers.SAXParserFactory",
"org.apache.xerces.jaxp.SAXParserFactoryImpl"); "org.apache.xerces.jaxp.SAXParserFactoryImpl");
PackInHandler handler = new PackInHandler(); PackInHandler handler = new PackInHandler();
handler.set_TrxName(trxName); PIPOContext context = new PIPOContext();
handler.setCtx(ctx); context.trx = Trx.get(trxName, true);
context.packIn = this;
context.ctx = ctx;
handler.setCtx(context);
handler.setProcess(this); handler.setProcess(this);
SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser(); SAXParser parser = factory.newSAXParser();
String msg = "Start Parser"; String msg = "Start Parser";
log.info(msg); log.info(msg);
parser.parse(input, handler); parser.parse(input, handler);
for (PO importDetail : importDetails) {
importDetail.saveEx();
}
msg = "End Parser"; msg = "End Parser";
log.info(msg); log.info(msg);
if (handler.getUnresolvedCount() > 0)
handler.dumpUnresolvedElements();
return "Processed="+handler.getElementsProcessed()+" Un-Resolved="+handler.getUnresolvedCount(); return "Processed="+handler.getElementsProcessed()+" Un-Resolved="+handler.getUnresolvedCount();
} catch (Exception e) { } catch (Exception e) {
log.log(Level.SEVERE, "importXML:", e); log.log(Level.SEVERE, "importXML:", e);
@ -188,6 +208,7 @@ public class PackIn {
else else
baos.write(b); baos.write(b);
} }
data = baos.toByteArray();
} finally { } finally {
if (fis != null) { if (fis != null) {
try { try {

View File

@ -19,27 +19,14 @@
package org.adempiere.pipo2; package org.adempiere.pipo2;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Properties; import java.util.Set;
import java.util.Stack; import java.util.Stack;
import java.util.logging.Level; import java.util.logging.Level;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
import org.adempiere.pipo2.exception.DatabaseAccessException; import org.adempiere.pipo2.exception.DatabaseAccessException;
import org.compiere.model.X_AD_Package_Imp; import org.compiere.model.X_AD_Package_Imp;
import org.compiere.model.X_AD_Package_Imp_Inst; import org.compiere.model.X_AD_Package_Imp_Inst;
@ -77,17 +64,9 @@ public class PackInHandler extends DefaultHandler {
private int AD_Package_Imp_ID=0; private int AD_Package_Imp_ID=0;
private int AD_Package_Imp_Inst_ID=0; private int AD_Package_Imp_Inst_ID=0;
private CLogger log = CLogger.getCLogger(PackInHandler.class); private CLogger log = CLogger.getCLogger(PackInHandler.class);
private OutputStream logOutputStream = null;
private TransformerHandler logDocument = null;
private StreamResult loStreamResult = null;
private SAXTransformerFactory transformerFactory = null;
private Transformer logTransformer = null;
private boolean isInit = false; private boolean isInit = false;
private String logDate = null;
private String packageStatus = "Installing"; private String packageStatus = "Installing";
// transaction name private PIPOContext m_ctx = null;
private String m_trxName = null;
private Properties m_ctx = null;
private IHandlerRegistry handlerRegistry = null; private IHandlerRegistry handlerRegistry = null;
private List<DeferEntry> defer = new ArrayList<DeferEntry>(); private List<DeferEntry> defer = new ArrayList<DeferEntry>();
@ -99,41 +78,11 @@ public class PackInHandler extends DefaultHandler {
packageDirectory = packIn.getPackageDirectory(); packageDirectory = packIn.getPackageDirectory();
m_updateDictionary = packIn.isUpdateDictionary(); m_updateDictionary = packIn.isUpdateDictionary();
SimpleDateFormat formatter_file = new SimpleDateFormat("yyMMddHHmmssZ");
SimpleDateFormat formatter_log = new SimpleDateFormat("MM/dd/yy HH:mm:ss");
Date today = new Date();
String fileDate = formatter_file.format(today);
logDate = formatter_log.format(today);
String logFileName = packageDirectory+File.separator+"doc"+File.separator+"Importlog_"+fileDate+".xml"; if (m_ctx == null)
log.info("packin log file="+logFileName); m_ctx = new PIPOContext();
try { if (m_ctx.trx == null)
logOutputStream = new FileOutputStream (logFileName, false); m_ctx.trx = Trx.get("PackIn", true);
} catch (FileNotFoundException e1) {
log.warning ("Failed to create log file. error="+e1+" file="+logFileName);
}
loStreamResult = new StreamResult(logOutputStream);
transformerFactory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
try {
logDocument = transformerFactory.newTransformerHandler();
} catch (TransformerConfigurationException e2) {
log.info ("startElement:"+e2);
}
logTransformer = logDocument.getTransformer();
logTransformer.setOutputProperty(OutputKeys.ENCODING,"ISO-8859-1");
logTransformer.setOutputProperty(OutputKeys.INDENT,"yes");
logDocument.setResult(loStreamResult);
logDocument.startDocument();
logDocument.processingInstruction("xml-stylesheet","type=\"text/css\" href=\"adempiereDocument.css\"");
Properties tmp = new Properties();
if (m_ctx != null)
tmp.putAll(m_ctx);
else
tmp.putAll(Env.getCtx());
m_ctx = tmp;
if (m_trxName == null)
m_trxName = Trx.createTrxName("PackIn");
isInit=true; isInit=true;
} }
@ -164,10 +113,17 @@ public class PackInHandler extends DefaultHandler {
{ {
log.info("adempiereAD updateMode="+m_updateDictionary); log.info("adempiereAD updateMode="+m_updateDictionary);
createLogHeader(atts); //check client
String clientAttribute = atts.getValue("Client");
String[] clientComponent = clientAttribute.split("[-]");
int clientId = Integer.parseInt(clientComponent[0]);
if (clientId == 0 && Env.getAD_Client_ID(m_ctx.ctx) > 0) {
throw new RuntimeException("Package is created for System, not Tenant");
} else if (clientId > 0 && Env.getAD_Client_ID(m_ctx.ctx) == 0) {
throw new RuntimeException("Package is created for Tenant, not System");
}
// Update Summary Package History Table // Update Summary Package History Table
int PK_preInstalled=0; int PK_preInstalled=0;
String packageName = packIn.getPackageName(); String packageName = packIn.getPackageName();
@ -199,8 +155,8 @@ public class PackInHandler extends DefaultHandler {
DB.close(rs, pstmt); DB.close(rs, pstmt);
} }
X_AD_Package_Imp packageImp = new X_AD_Package_Imp(m_ctx, 0, null); X_AD_Package_Imp packageImp = new X_AD_Package_Imp(m_ctx.ctx, 0, null);
packageImp.setAD_Org_ID(Env.getAD_Org_ID(m_ctx)); packageImp.setAD_Org_ID(Env.getAD_Org_ID(m_ctx.ctx));
packageImp.setReleaseNo(atts.getValue("CompVer")); packageImp.setReleaseNo(atts.getValue("CompVer"));
packageImp.setPK_Version(packageVersion); packageImp.setPK_Version(packageVersion);
packageImp.setVersion(atts.getValue("DataBase")); packageImp.setVersion(atts.getValue("DataBase"));
@ -216,8 +172,8 @@ public class PackInHandler extends DefaultHandler {
if ( PK_preInstalled <= 0){ if ( PK_preInstalled <= 0){
//Insert Package into package install log //Insert Package into package install log
X_AD_Package_Imp_Inst packageInst = new X_AD_Package_Imp_Inst(m_ctx, 0, null); X_AD_Package_Imp_Inst packageInst = new X_AD_Package_Imp_Inst(m_ctx.ctx, 0, null);
packageInst.setAD_Org_ID(Env.getAD_Org_ID(m_ctx)); packageInst.setAD_Org_ID(Env.getAD_Org_ID(m_ctx.ctx));
packageInst.setReleaseNo(atts.getValue("CompVer")); packageInst.setReleaseNo(atts.getValue("CompVer"));
packageInst.setPK_Version(atts.getValue("Version")); packageInst.setPK_Version(atts.getValue("Version"));
packageInst.setVersion(atts.getValue("DataBase")); packageInst.setVersion(atts.getValue("DataBase"));
@ -232,17 +188,15 @@ public class PackInHandler extends DefaultHandler {
//Update package list with package status //Update package list with package status
AD_Package_Imp_Inst_ID = PK_preInstalled; AD_Package_Imp_Inst_ID = PK_preInstalled;
X_AD_Package_Imp_Inst packageInst = new X_AD_Package_Imp_Inst(m_ctx, AD_Package_Imp_Inst_ID, null); X_AD_Package_Imp_Inst packageInst = new X_AD_Package_Imp_Inst(m_ctx.ctx, AD_Package_Imp_Inst_ID, null);
packageInst.setPK_Status(packageStatus); packageInst.setPK_Status(packageStatus);
packageInst.saveEx(); packageInst.saveEx();
} }
Env.setContext(m_ctx, "AD_Package_Imp_ID", AD_Package_Imp_ID); m_ctx.ctx.put("AD_Package_Imp_ID", AD_Package_Imp_ID);
Env.setContext(m_ctx, "UpdateMode", m_updateDictionary); m_ctx.ctx.put("UpdateMode", m_updateDictionary);
Env.setContext(m_ctx, "TrxName", m_trxName); m_ctx.ctx.put("PackageDirectory", packageDirectory);
Env.setContext(m_ctx, "PackageDirectory", packageDirectory); m_ctx.packIn = packIn;
m_ctx.put("LogDocument", logDocument);
m_ctx.put(PACK_IN_PROCESS_CTX_KEY, packIn);
} else { } else {
Element e = new Element(uri, localName, qName, new AttributesImpl(atts)); Element e = new Element(uri, localName, qName, new AttributesImpl(atts));
if (stack.size() > 0) if (stack.size() > 0)
@ -292,22 +246,6 @@ public class PackInHandler extends DefaultHandler {
} }
} }
private void createLogHeader(Attributes atts) throws SAXException {
AttributesImpl attsOut = new AttributesImpl();
logDocument.startElement("","","adempiereDocument",attsOut);
PackOut.addTextElement(logDocument, "header", atts.getValue("Name")+" Install Log", attsOut);
PackOut.addTextElement(logDocument, "H3", "Package Name:", attsOut);
PackOut.addTextElement(logDocument, "packagename4log", atts.getValue("Name"), attsOut);
PackOut.addTextElement(logDocument, "H3", "Version:", attsOut);
PackOut.addTextElement(logDocument, "Version", atts.getValue("Version"), attsOut);
PackOut.addTextElement(logDocument, "H3", "Package Install Date:", attsOut);
PackOut.addTextElement(logDocument, "installDate", logDate, attsOut);
PackOut.addTextElement(logDocument, "H3", "Min. Version:", attsOut);
PackOut.addTextElement(logDocument, "AdempiereVersion", atts.getValue("AdempiereVersion"), attsOut);
PackOut.addTextElement(logDocument, "H3", "Min. Database Date:", attsOut);
PackOut.addTextElement(logDocument, "Database", atts.getValue("Database"), attsOut);
}
/** /**
* @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int) * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
*/ */
@ -343,30 +281,38 @@ public class PackInHandler extends DefaultHandler {
packageStatus = "Completed successfully"; packageStatus = "Completed successfully";
//Update package history log with package status //Update package history log with package status
X_AD_Package_Imp packageImp = new X_AD_Package_Imp(m_ctx, AD_Package_Imp_ID, null); X_AD_Package_Imp packageImp = new X_AD_Package_Imp(m_ctx.ctx, AD_Package_Imp_ID, null);
packageImp.setPK_Status(packageStatus); packageImp.setPK_Status(packageStatus);
packageImp.saveEx(); packageImp.saveEx();
//Update package list with package status //Update package list with package status
X_AD_Package_Imp_Inst packageInst = new X_AD_Package_Imp_Inst(m_ctx, AD_Package_Imp_Inst_ID, null); X_AD_Package_Imp_Inst packageInst = new X_AD_Package_Imp_Inst(m_ctx.ctx, AD_Package_Imp_Inst_ID, null);
packageInst.setPK_Status(packageStatus); packageInst.setPK_Status(packageStatus);
packageInst.saveEx(); packageInst.saveEx();
logDocument.endElement("","","adempiereDocument");
logDocument.endDocument();
try {
logOutputStream.close();
}
catch (Exception e)
{}
//reset //reset
setupHandlers(); setupHandlers();
} else { } else {
Element e = stack.pop(); Element e = stack.pop();
if (stack.isEmpty()) if (stack.isEmpty())
{ {
try {
processElement(e); processElement(e);
} catch (RuntimeException re) {
packageStatus = "Import Failed";
//Update package history log with package status
X_AD_Package_Imp packageImp = new X_AD_Package_Imp(m_ctx.ctx, AD_Package_Imp_ID, null);
packageImp.setPK_Status(packageStatus);
packageImp.save();
throw re;
} catch (SAXException se) {
packageStatus = "Import Failed";
//Update package history log with package status
X_AD_Package_Imp packageImp = new X_AD_Package_Imp(m_ctx.ctx, AD_Package_Imp_ID, null);
packageImp.setPK_Status(packageStatus);
packageImp.save();
throw se;
}
} }
} }
} // endElement } // endElement
@ -391,7 +337,7 @@ public class PackInHandler extends DefaultHandler {
} }
} }
if (log.isLoggable(Level.INFO)) { if (log.isLoggable(Level.INFO)) {
log.info("Processeing Element: " + d.element.getElementValue() + " - " log.info("Processing Element: " + d.element.getElementValue() + " - "
+ d.element.attributes.getValue(0)); + d.element.attributes.getValue(0));
} }
ElementHandler handler = handlerRegistry.getHandler(d.element); ElementHandler handler = handlerRegistry.getHandler(d.element);
@ -419,13 +365,7 @@ public class PackInHandler extends DefaultHandler {
} while (defer.size() > 0); } while (defer.size() > 0);
} }
// globalqss - add support for trx in 3.1.2 public void setCtx(PIPOContext ctx) {
public void set_TrxName(String trxName) {
m_trxName = trxName;
}
// globalqss - add support for trx in 3.1.2
public void setCtx(Properties ctx) {
m_ctx = ctx; m_ctx = ctx;
} }
@ -457,6 +397,35 @@ public class PackInHandler extends DefaultHandler {
return count; return count;
} }
public void dumpUnresolvedElements() {
if (defer != null && !defer.isEmpty()) {
for(DeferEntry entry : defer) {
if (!entry.startElement)
{
Element e = entry.element;
StringBuffer s = new StringBuffer(e.qName);
s.append(" [");
Set<String> keys = e.properties.keySet();
int i = 0;
for(String key : keys)
{
Element value = e.properties.get(key);
if (i > 0)
s.append(", ");
s.append(key).append("=");
if (value.contents != null)
s.append(value.contents);
i++;
}
s.append("]");
if (e.unresolved != null && e.unresolved.length() > 0)
s.append(" unresolved ").append(e.unresolved);
log.warning(s.toString());
}
}
}
}
class DeferEntry { class DeferEntry {
Element element; Element element;
boolean startElement = false; boolean startElement = false;

View File

@ -18,8 +18,11 @@
package org.adempiere.pipo2; package org.adempiere.pipo2;
import java.io.File; import java.io.File;
import java.sql.Timestamp;
import org.compiere.Adempiere; import org.compiere.Adempiere;
import org.compiere.model.MAttachment;
import org.compiere.model.MAttachmentEntry;
import org.compiere.model.X_AD_Package_Imp_Proc; import org.compiere.model.X_AD_Package_Imp_Proc;
import org.compiere.process.ProcessInfoParameter; import org.compiere.process.ProcessInfoParameter;
import org.compiere.process.SvrProcess; import org.compiere.process.SvrProcess;
@ -70,7 +73,7 @@ public class PackInProcess extends SvrProcess {
protected String doIt() throws Exception { protected String doIt() throws Exception {
X_AD_Package_Imp_Proc adPackageImp = new X_AD_Package_Imp_Proc(getCtx(), X_AD_Package_Imp_Proc adPackageImp = new X_AD_Package_Imp_Proc(getCtx(),
p_PackIn_ID, null); p_PackIn_ID, get_TrxName());
// Create Target directory if required // Create Target directory if required
String packageDirectory = adPackageImp.getAD_Package_Dir(); String packageDirectory = adPackageImp.getAD_Package_Dir();
@ -78,7 +81,7 @@ public class PackInProcess extends SvrProcess {
packageDirectory = Adempiere.getAdempiereHome(); packageDirectory = Adempiere.getAdempiereHome();
} }
String targetDirName = packageDirectory + File.separator + "packages"; String targetDirName = packageDirectory + File.separator + "packin";
File targetDir = new File(targetDirName); File targetDir = new File(targetDirName);
if (!targetDir.exists()) { if (!targetDir.exists()) {
@ -88,14 +91,24 @@ public class PackInProcess extends SvrProcess {
} }
} }
MAttachment attachment = adPackageImp.getAttachment();
if (attachment == null) {
return "Please attach the pack out archive before running the process";
}
MAttachmentEntry entry = attachment.getEntry(0);
if (entry == null) {
return "Please attach the pack out archive before running the process";
}
// Unzip package // Unzip package
File zipFilepath = new File(adPackageImp.getAD_Package_Source()); File zipFilepath = entry.getFile();
log.info("zipFilepath->" + zipFilepath); log.info("zipFilepath->" + zipFilepath);
String parentDir = Zipper.getParentDir(zipFilepath); String parentDir = Zipper.getParentDir(zipFilepath);
Zipper.unpackFile(zipFilepath, targetDir); Zipper.unpackFile(zipFilepath, targetDir);
String dict_file = packageDirectory + File.separator String dict_file = packageDirectory + File.separator
+ "packages" + File.separator + parentDir + File.separator + "packin" + File.separator + parentDir + File.separator
+ "dict" + File.separator + "PackOut.xml"; + "dict" + File.separator + "PackOut.xml";
log.info("dict file->" + dict_file); log.info("dict file->" + dict_file);
@ -106,15 +119,23 @@ public class PackInProcess extends SvrProcess {
m_UpdateDictionary = false; m_UpdateDictionary = false;
m_packageDirectory = packageDirectory + File.separator m_packageDirectory = packageDirectory + File.separator
+ "packages" + File.separator + parentDir + File.separator; + "packin" + File.separator + parentDir + File.separator;
PackIn packIn = new PackIn(); PackIn packIn = new PackIn();
packIn.setPackageDirectory(m_packageDirectory); packIn.setPackageDirectory(m_packageDirectory);
packIn.setPackageName(packageName); packIn.setPackageName(packageName);
packIn.setPackageVersion(packageVersion); packIn.setPackageVersion(packageVersion);
packIn.setUpdateDictionary(m_UpdateDictionary); packIn.setUpdateDictionary(m_UpdateDictionary);
// call XML Handler // call XML Handler
String msg = packIn.importXML(dict_file, getCtx(), get_TrxName()); String msg = packIn.importXML(dict_file, getCtx(), get_TrxName());
if (adPackageImp.get_ColumnIndex("DateProcessed") > 0) {
adPackageImp.set_ValueOfColumn("DateProcessed", new Timestamp(System.currentTimeMillis()));
}
if (adPackageImp.get_ColumnIndex("P_Msg") > 0) {
adPackageImp.set_ValueOfColumn("P_Msg", msg);
}
adPackageImp.saveEx();
return msg; return msg;
} // doIt } // doIt

View File

@ -27,6 +27,7 @@ import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.sql.Timestamp;
import java.util.List; import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.logging.Level; import java.util.logging.Level;
@ -41,7 +42,7 @@ import javax.xml.transform.stream.StreamResult;
import org.compiere.model.MClient; import org.compiere.model.MClient;
import org.compiere.model.MTable; import org.compiere.model.MTable;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.Env; import org.compiere.util.Trx;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl; import org.xml.sax.helpers.AttributesImpl;
@ -66,10 +67,6 @@ public class PackOut
public final static String PackOutVersion = "100"; public final static String PackOutVersion = "100";
private final static CLogger log = CLogger.getCLogger(PackOut.class); private final static CLogger log = CLogger.getCLogger(PackOut.class);
private static final String TRX_NAME_CTX_KEY = "TrxName";
public static final String PACK_OUT_PROCESS_CTX_KEY = "PackOutProcess";
private Properties localContext = null;
private String packageDirectory; private String packageDirectory;
private int blobCount = 0; private int blobCount = 0;
@ -80,6 +77,8 @@ public class PackOut
private int processedCount; private int processedCount;
private String exportFile; private String exportFile;
private String packoutDirectory; private String packoutDirectory;
private PIPOContext pipoContext;
private Timestamp fromDate;
public static final int MAX_OFFICIAL_ID = MTable.MAX_OFFICIAL_ID; public static final int MAX_OFFICIAL_ID = MTable.MAX_OFFICIAL_ID;
@ -192,26 +191,33 @@ public class PackOut
OutputStream packoutStream) throws UnsupportedEncodingException, TransformerConfigurationException, SAXException { OutputStream packoutStream) throws UnsupportedEncodingException, TransformerConfigurationException, SAXException {
StreamResult packoutStreamResult = new StreamResult(new OutputStreamWriter(packoutStream,"UTF-8")); StreamResult packoutStreamResult = new StreamResult(new OutputStreamWriter(packoutStream,"UTF-8"));
SAXTransformerFactory packoutFactory = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); SAXTransformerFactory packoutFactory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
//indent-number attribute support is not guarantee
try {
packoutFactory.setAttribute("indent-number", new Integer(4)); packoutFactory.setAttribute("indent-number", new Integer(4));
} catch (Exception e) {}
TransformerHandler packoutHandler = packoutFactory.newTransformerHandler(); TransformerHandler packoutHandler = packoutFactory.newTransformerHandler();
Transformer packoutTransformer = packoutHandler.getTransformer(); Transformer packoutTransformer = packoutHandler.getTransformer();
packoutTransformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); packoutTransformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
packoutTransformer.setOutputProperty(OutputKeys.INDENT,"yes"); packoutTransformer.setOutputProperty(OutputKeys.INDENT,"yes");
//indent-amount property support is not guarantee
try {
packoutTransformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount","4");
} catch (Exception e) {}
packoutHandler.setResult(packoutStreamResult); packoutHandler.setResult(packoutStreamResult);
packoutHandler.startDocument(); packoutHandler.startDocument();
AttributesImpl atts = new AttributesImpl(); AttributesImpl atts = new AttributesImpl();
atts.addAttribute("","","Name","CDATA",packoutDocument.getPackageName()); atts.addAttribute("","","Name","CDATA",packoutDocument.getPackageName());
atts.addAttribute("","","Version","CDATA",packoutDocument.getPackageVersion()); atts.addAttribute("","","Version","CDATA",packoutDocument.getPackageVersion());
atts.addAttribute("","","AdempiereVersion","CDATA",packoutDocument.getAdempiereVersion()); atts.addAttribute("","","AdempiereVersion","CDATA",emptyIfNull(packoutDocument.getAdempiereVersion()));
atts.addAttribute("","","DataBaseVersion","CDATA",packoutDocument.getDatabaseVersion()); atts.addAttribute("","","DataBaseVersion","CDATA",emptyIfNull(packoutDocument.getDatabaseVersion()));
atts.addAttribute("","","Description","CDATA",emptyIfNull(packoutDocument.getDescription())); atts.addAttribute("","","Description","CDATA",emptyIfNull(packoutDocument.getDescription()));
atts.addAttribute("","","Author","CDATA",packoutDocument.getAuthor()); atts.addAttribute("","","Author","CDATA",emptyIfNull(packoutDocument.getAuthor()));
atts.addAttribute("","","AuthorEmail","CDATA",emptyIfNull(packoutDocument.getAuthorEmail())); atts.addAttribute("","","AuthorEmail","CDATA",emptyIfNull(packoutDocument.getAuthorEmail()));
atts.addAttribute("","","CreatedDate","CDATA",packoutDocument.getCreated().toString()); atts.addAttribute("","","CreatedDate","CDATA",packoutDocument.getCreated().toString());
atts.addAttribute("","","UpdatedDate","CDATA",packoutDocument.getUpdated().toString()); atts.addAttribute("","","UpdatedDate","CDATA",packoutDocument.getUpdated().toString());
atts.addAttribute("","","PackOutVersion","CDATA",PackOutVersion); atts.addAttribute("","","PackOutVersion","CDATA",PackOutVersion);
MClient client = MClient.get(localContext); MClient client = MClient.get(pipoContext.ctx);
StringBuffer sb = new StringBuffer () StringBuffer sb = new StringBuffer ()
.append(client.get_ID()) .append(client.get_ID())
.append("-") .append("-")
@ -231,11 +237,18 @@ public class PackOut
private TransformerHandler createDocHandler(OutputStream docStream) throws UnsupportedEncodingException, TransformerConfigurationException, SAXException { private TransformerHandler createDocHandler(OutputStream docStream) throws UnsupportedEncodingException, TransformerConfigurationException, SAXException {
StreamResult docStreamResult = new StreamResult(new OutputStreamWriter(docStream,"UTF-8")); StreamResult docStreamResult = new StreamResult(new OutputStreamWriter(docStream,"UTF-8"));
SAXTransformerFactory transformerFactory = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); SAXTransformerFactory transformerFactory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
//indent-number attribute support is not guarantee
try {
transformerFactory.setAttribute("indent-number", new Integer(4)); transformerFactory.setAttribute("indent-number", new Integer(4));
} catch (Exception e) {}
TransformerHandler docHandler = transformerFactory.newTransformerHandler(); TransformerHandler docHandler = transformerFactory.newTransformerHandler();
Transformer transformer = docHandler.getTransformer(); Transformer transformer = docHandler.getTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8"); transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT,"yes"); transformer.setOutputProperty(OutputKeys.INDENT,"yes");
//indent-amount property support is not guarantee
try {
transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount","4");
} catch (Exception e) {}
docHandler.setResult(docStreamResult); docHandler.setResult(docStreamResult);
docHandler.startDocument(); docHandler.startDocument();
docHandler.processingInstruction("xml-stylesheet","type=\"text/css\" href=\"adempiereDocument.css\""); docHandler.processingInstruction("xml-stylesheet","type=\"text/css\" href=\"adempiereDocument.css\"");
@ -261,7 +274,7 @@ public class PackOut
addTextElement(docHandler, "filedirectory", "Directory: \\dict\\", atts); addTextElement(docHandler, "filedirectory", "Directory: \\dict\\", atts);
addTextElement(docHandler, "filenotes", "Notes: Contains all application/object settings for package", atts); addTextElement(docHandler, "filenotes", "Notes: Contains all application/object settings for package", atts);
MClient client = MClient.get(localContext); MClient client = MClient.get(pipoContext.ctx);
StringBuffer sb = new StringBuffer () StringBuffer sb = new StringBuffer ()
.append(client.get_ID()) .append(client.get_ID())
.append("-") .append("-")
@ -281,13 +294,7 @@ public class PackOut
} }
private void initContext() { private void initContext() {
Properties tmp = new Properties(); pipoContext.trx = Trx.get(trxName, true);
if (getCtx() != null)
tmp.putAll(getCtx());
if (trxName != null)
tmp.put(TRX_NAME_CTX_KEY, trxName);
tmp.put(PACK_OUT_PROCESS_CTX_KEY, this);
localContext = tmp;
} }
/** /**
@ -352,8 +359,8 @@ public class PackOut
} }
} }
public Properties getCtx() { public PIPOContext getCtx() {
return localContext != null ? localContext : Env.getCtx(); return pipoContext;
} }
/** /**
@ -422,4 +429,25 @@ public class PackOut
public String getExportFile() { public String getExportFile() {
return exportFile; return exportFile;
} }
/**
* @param fromDate
*/
public void setFromDate(Timestamp fromDate) {
this.fromDate = fromDate;
}
/**
* @return from date
*/
public Timestamp getFromDate() {
return fromDate;
}
/**
* @param ctx
*/
public void setCtx(Properties ctx) {
pipoContext.ctx = ctx;
}
} // PackOut } // PackOut

View File

@ -19,12 +19,14 @@
package org.adempiere.pipo2; package org.adempiere.pipo2;
import java.io.File; import java.io.File;
import java.sql.Timestamp;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.logging.Level; import java.util.logging.Level;
import org.compiere.Adempiere;
import org.compiere.model.I_AD_Form; import org.compiere.model.I_AD_Form;
import org.compiere.model.I_AD_ImpFormat; import org.compiere.model.I_AD_ImpFormat;
import org.compiere.model.I_AD_Menu; import org.compiere.model.I_AD_Menu;
@ -95,9 +97,27 @@ public class PackOutProcess extends SvrProcess
if (packageExp.getAD_Package_Exp_ID() == p_PackOut_ID){ if (packageExp.getAD_Package_Exp_ID() == p_PackOut_ID){
//Create the package documentation //Create the package documentation
packoutDirectory = packageExp.getFile_Directory().trim(); packoutDirectory = packageExp.getFile_Directory();
if (packoutDirectory == null || packoutDirectory.trim().length() == 0) {
packoutDirectory = Adempiere.getAdempiereHome().trim();
if (!packoutDirectory.endsWith("/") && !packoutDirectory.endsWith("\\")) if (!packoutDirectory.endsWith("/") && !packoutDirectory.endsWith("\\"))
packoutDirectory+= File.separator; packoutDirectory+= File.separator;
packoutDirectory = packoutDirectory + "packout" + File.separator;
} else {
packoutDirectory = packoutDirectory.trim();
if (!packoutDirectory.endsWith("/") && !packoutDirectory.endsWith("\\"))
packoutDirectory+= File.separator;
}
//create packout folder if needed
File packoutDirectoryFile = new File(packoutDirectory);
if (!packoutDirectoryFile.exists()) {
boolean success = packoutDirectoryFile.mkdirs();
if (!success) {
log.warning("Failed to create target directory. " + packoutDirectory);
}
}
PackoutDocument packoutDocument = new PackoutDocument(packageExp.getName(), packageExp.getPK_Version(), packageExp.getReleaseNo(), packageExp.getVersion(), PackoutDocument packoutDocument = new PackoutDocument(packageExp.getName(), packageExp.getPK_Version(), packageExp.getReleaseNo(), packageExp.getVersion(),
packageExp.getDescription(), packageExp.getInstructions(), packageExp.getUserName(), packageExp.getDescription(), packageExp.getInstructions(), packageExp.getUserName(),
packageExp.getEMail(), packageExp.getCreated(), packageExp.getUpdated()); packageExp.getEMail(), packageExp.getCreated(), packageExp.getUpdated());
@ -115,6 +135,12 @@ public class PackOutProcess extends SvrProcess
} }
PackOut packOut = new PackOut(); PackOut packOut = new PackOut();
packOut.setCtx(getCtx());
Object dateFromValue = packageExp.get_Value("DateFrom");
if (dateFromValue != null && dateFromValue instanceof Timestamp) {
packOut.setFromDate((Timestamp) dateFromValue);
}
packOut.export(packoutDirectory, null, packoutDocument, packoutItems, get_TrxName()); packOut.export(packoutDirectory, null, packoutDocument, packoutItems, get_TrxName());
processedCount = packOut.getExportCount(); processedCount = packOut.getExportCount();
exportFile = packOut.getExportFile(); exportFile = packOut.getExportFile();

View File

@ -2,18 +2,17 @@ package org.adempiere.pipo2;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Properties;
import java.util.UUID;
import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.sax.TransformerHandler;
import org.adempiere.exceptions.AdempiereException; import org.adempiere.exceptions.AdempiereException;
import org.compiere.model.I_AD_Client;
import org.compiere.model.I_AD_Org;
import org.compiere.model.MTable; import org.compiere.model.MTable;
import org.compiere.model.PO; import org.compiere.model.PO;
import org.compiere.model.POInfo; import org.compiere.model.POInfo;
import org.compiere.model.X_AD_Client;
import org.compiere.model.X_AD_Org;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.DB;
import org.compiere.util.DisplayType; import org.compiere.util.DisplayType;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl; import org.xml.sax.helpers.AttributesImpl;
@ -24,7 +23,7 @@ public class PoExporter {
@SuppressWarnings("unused") @SuppressWarnings("unused")
private CLogger log = CLogger.getCLogger(getClass()); private CLogger log = CLogger.getCLogger(getClass());
private Properties ctx; private PIPOContext ctx;
private TransformerHandler transformerHandler; private TransformerHandler transformerHandler;
@ -48,7 +47,7 @@ public class PoExporter {
* @param ctx * @param ctx
* @param po * @param po
*/ */
public PoExporter(Properties ctx, TransformerHandler handler, PO po){ public PoExporter(PIPOContext ctx, TransformerHandler handler, PO po){
this.ctx = ctx; this.ctx = ctx;
this.po = po; this.po = po;
transformerHandler = handler; transformerHandler = handler;
@ -180,9 +179,13 @@ public class PoExporter {
int AD_Client_ID = po.getAD_Client_ID(); int AD_Client_ID = po.getAD_Client_ID();
if (AD_Client_ID == 0) if (AD_Client_ID == 0)
{ {
addString("AD_Client_ID", "0", new AttributesImpl());
if (excludes == null || !excludes.contains("AD_Org_ID"))
addString("AD_Org_ID", "0", new AttributesImpl()); addString("AD_Org_ID", "0", new AttributesImpl());
} }
else else
{
if (excludes == null || !excludes.contains("AD_Org_ID"))
{ {
int AD_Org_ID = po.getAD_Org_ID(); int AD_Org_ID = po.getAD_Org_ID();
if (AD_Org_ID == 0) if (AD_Org_ID == 0)
@ -194,8 +197,9 @@ public class PoExporter {
if (!preservedOrg) if (!preservedOrg)
addString("AD_Org_ID", "@AD_Org_ID@", new AttributesImpl()); addString("AD_Org_ID", "@AD_Org_ID@", new AttributesImpl());
else { else {
addTableReference(I_AD_Client.Table_Name, I_AD_Client.COLUMNNAME_Value, new AttributesImpl()); addTableReference(X_AD_Client.Table_Name, "Value", new AttributesImpl());
addTableReference(I_AD_Org.Table_Name, I_AD_Org.COLUMNNAME_Value, new AttributesImpl()); addTableReference(X_AD_Org.Table_Name, "Value", new AttributesImpl());
}
} }
} }
} }
@ -225,8 +229,18 @@ public class PoExporter {
if ("Record_ID".equalsIgnoreCase(columnName) && po.get_ColumnIndex("AD_Table_ID") >= 0) { if ("Record_ID".equalsIgnoreCase(columnName) && po.get_ColumnIndex("AD_Table_ID") >= 0) {
int AD_Table_ID = po.get_Value(po.get_ColumnIndex("AD_Table_ID")) != null int AD_Table_ID = po.get_Value(po.get_ColumnIndex("AD_Table_ID")) != null
? (Integer)po.get_Value(po.get_ColumnIndex("AD_Table_ID")) : 0; ? (Integer)po.get_Value(po.get_ColumnIndex("AD_Table_ID")) : 0;
tableName = MTable.getTableName(ctx, AD_Table_ID); tableName = MTable.getTableName(ctx.ctx, AD_Table_ID);
searchColumn = tableName + "_ID"; searchColumn = tableName + "_ID";
} else if (po.get_TableName().equals("AD_TreeNode") && columnName.equals("Parent_ID")) {
int AD_Tree_ID = po.get_ValueAsInt("AD_Tree_ID");
int AD_Table_ID = DB.getSQLValue(po.get_TrxName(), "SELECT AD_Table_ID From AD_Tree WHERE AD_Tree_ID="+AD_Tree_ID);
tableName = MTable.getTableName(po.getCtx(), AD_Table_ID);
searchColumn = tableName+"_ID";
} else if (po.get_TableName().equals("AD_TreeNode") && columnName.equals("Node_ID")) {
int AD_Tree_ID = po.get_ValueAsInt("AD_Tree_ID");
int AD_Table_ID = DB.getSQLValue(po.get_TrxName(), "SELECT AD_Table_ID From AD_Tree WHERE AD_Tree_ID="+AD_Tree_ID);
tableName = MTable.getTableName(po.getCtx(), AD_Table_ID);
searchColumn = tableName+"_ID";
} else { } else {
//remove _ID //remove _ID
searchColumn = columnName; searchColumn = columnName;
@ -257,7 +271,7 @@ public class PoExporter {
if ("Record_ID".equalsIgnoreCase(columnName) && po.get_ColumnIndex("AD_Table_ID") >= 0) { if ("Record_ID".equalsIgnoreCase(columnName) && po.get_ColumnIndex("AD_Table_ID") >= 0) {
int AD_Table_ID = po.get_Value(po.get_ColumnIndex("AD_Table_ID")) != null int AD_Table_ID = po.get_Value(po.get_ColumnIndex("AD_Table_ID")) != null
? (Integer)po.get_Value(po.get_ColumnIndex("AD_Table_ID")) : 0; ? (Integer)po.get_Value(po.get_ColumnIndex("AD_Table_ID")) : 0;
tableName = MTable.getTableName(ctx, AD_Table_ID); tableName = MTable.getTableName(ctx.ctx, AD_Table_ID);
searchColumn = tableName + "_ID"; searchColumn = tableName + "_ID";
} else if (info.getColumnLookup(i) != null){ } else if (info.getColumnLookup(i) != null){
searchColumn = info.getColumnLookup(i).getColumnName(); searchColumn = info.getColumnLookup(i).getColumnName();
@ -286,6 +300,8 @@ public class PoExporter {
addTableReference(columnName, tableName, searchColumn, new AttributesImpl()); addTableReference(columnName, tableName, searchColumn, new AttributesImpl());
} else if (DisplayType.isLOB(displayType)) { } else if (DisplayType.isLOB(displayType)) {
addBlob(columnName); addBlob(columnName);
} else if (columnName.equals(po.getUUIDColumnName()) && po.get_Value(columnName) == null) {
continue;
} else { } else {
add(columnName, "", new AttributesImpl()); add(columnName, "", new AttributesImpl());
} }
@ -299,7 +315,7 @@ public class PoExporter {
return; return;
} }
PackOut packOut = (PackOut) ctx.get(PackOut.PACK_OUT_PROCESS_CTX_KEY); PackOut packOut = ctx.packOut;
byte[] data = null; byte[] data = null;
String dataType = null; String dataType = null;
String fileName = null; String fileName = null;

View File

@ -5,7 +5,6 @@ import java.math.BigDecimal;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Properties;
import org.adempiere.exceptions.AdempiereException; import org.adempiere.exceptions.AdempiereException;
import org.compiere.model.PO; import org.compiere.model.PO;
@ -16,8 +15,9 @@ import org.compiere.util.Env;
public class PoFiller{ public class PoFiller{
PO po = null; PO po = null;
@SuppressWarnings("unused")
private AbstractElementHandler handler; private AbstractElementHandler handler;
private Properties ctx; private PIPOContext ctx;
private Element element; private Element element;
/** /**
@ -26,7 +26,7 @@ public class PoFiller{
* @param atts * @param atts
* @param handler * @param handler
*/ */
public PoFiller(Properties ctx, PO po, Element element, AbstractElementHandler handler){ public PoFiller(PIPOContext ctx, PO po, Element element, AbstractElementHandler handler){
this.ctx = ctx; this.ctx = ctx;
this.po = po; this.po = po;
@ -51,7 +51,7 @@ public class PoFiller{
else if (oldValue != null && oldValue.toString().equals(value)) else if (oldValue != null && oldValue.toString().equals(value))
return; return;
else else
po.set_ValueOfColumn(columnName, value); po.set_ValueNoCheck(columnName, value);
} }
/** /**
@ -68,7 +68,7 @@ public class PoFiller{
if (po.get_Value(columnName) != null && po.get_ValueAsBoolean(columnName) == bool) if (po.get_Value(columnName) != null && po.get_ValueAsBoolean(columnName) == bool)
return; return;
else else
po.set_ValueOfColumn(columnName, bool); po.set_ValueNoCheck(columnName, bool);
} }
/** /**
@ -89,7 +89,7 @@ public class PoFiller{
else if (oldValue != null && oldValue.equals(ts)) else if (oldValue != null && oldValue.equals(ts))
return; return;
else else
po.set_ValueOfColumn(qName, ts); po.set_ValueNoCheck(qName, ts);
} }
/** /**
@ -110,7 +110,7 @@ public class PoFiller{
else if (oldValue != null && oldValue.equals(i)) else if (oldValue != null && oldValue.equals(i))
return; return;
else else
po.set_ValueOfColumn(qName, i); po.set_ValueNoCheck(qName, i);
} }
/** /**
@ -131,10 +131,10 @@ public class PoFiller{
else if (oldValue != null && oldValue.equals(bd)) else if (oldValue != null && oldValue.equals(bd))
return; return;
else else
po.set_ValueOfColumn(qName, bd); po.set_ValueNoCheck(qName, bd);
} }
public static int findTableReference(Properties ctx, AbstractElementHandler handler, Element element, String qName) { public static int findTableReference(PIPOContext ctx, AbstractElementHandler handler, Element element, String qName) {
Element propertyElement = element.properties.get(qName); Element propertyElement = element.properties.get(qName);
if (propertyElement == null) if (propertyElement == null)
return 0; return 0;
@ -169,16 +169,16 @@ public class PoFiller{
String value = e.contents.toString(); String value = e.contents.toString();
String columnName = qName; String columnName = qName;
if (value != null && value.trim().length() > 0) { if (value != null && value.trim().length() > 0) {
int id = ReferenceUtils.resolveReference(ctx, e, po.get_TrxName()); int id = ReferenceUtils.resolveReference(ctx.ctx, e, po.get_TrxName());
if (columnName.equals("AD_Client_ID") && id > 0) { if (columnName.equals("AD_Client_ID") && id > 0) {
if (id != Env.getAD_Client_ID(ctx)) { if (id != Env.getAD_Client_ID(ctx.ctx)) {
return -1; return -1;
} }
} }
if (po.get_ColumnIndex(columnName) >= 0) { if (po.get_ColumnIndex(columnName) >= 0) {
if (id > 0) { if (id > 0) {
if (po.get_ValueAsInt(columnName) != id) { if (po.get_ValueAsInt(columnName) != id) {
po.set_ValueOfColumn(columnName, id); po.set_ValueNoCheck(columnName, id);
} }
return id; return id;
} }
@ -199,17 +199,27 @@ public class PoFiller{
POInfo info = POInfo.getPOInfo(po.getCtx(), po.get_Table_ID()); POInfo info = POInfo.getPOInfo(po.getCtx(), po.get_Table_ID());
List<String>notFounds = new ArrayList<String>(); List<String>notFounds = new ArrayList<String>();
//special treatment for ad_org_id //special treatment for ad_client_id and ad_org_id
Element clientElement = element.properties.get("AD_Client_ID");
String sAD_Client_ID = clientElement != null ? clientElement.contents.toString() : null;
if (sAD_Client_ID != null && sAD_Client_ID.equals("0"))
{
po.set_ValueNoCheck("AD_Client_ID", 0);
po.setAD_Org_ID(0);
}
else
{
Element orgElement = element.properties.get("AD_Org_ID"); Element orgElement = element.properties.get("AD_Org_ID");
String sAD_Org_ID = orgElement != null ? orgElement.contents.toString() : null; String sAD_Org_ID = orgElement != null ? orgElement.contents.toString() : null;
if (sAD_Org_ID != null && sAD_Org_ID.equals("0")) if (sAD_Org_ID != null && sAD_Org_ID.equals("0"))
po.setAD_Org_ID(0); po.setAD_Org_ID(0);
else if (sAD_Org_ID != null && sAD_Org_ID.equals("@AD_Org_ID@")) else if (sAD_Org_ID != null && sAD_Org_ID.equals("@AD_Org_ID@"))
po.setAD_Org_ID(Env.getAD_Org_ID(ctx)); po.setAD_Org_ID(Env.getAD_Org_ID(ctx.ctx));
else { else {
if (setTableReference("AD_Client_ID") >= 0) if (setTableReference("AD_Client_ID") >= 0)
setTableReference("AD_Org_ID"); setTableReference("AD_Org_ID");
} }
}
for(String qName : element.properties.keySet()) { for(String qName : element.properties.keySet()) {
if (excludes != null ){ if (excludes != null ){
@ -262,7 +272,7 @@ public class PoFiller{
if (component.length == 2) { if (component.length == 2) {
String fileName = component[0]; String fileName = component[0];
String dataType = component[1]; String dataType = component[1];
PackIn packIn = handler.getPackIn(ctx); PackIn packIn = ctx.packIn;
try { try {
byte[] bytes = packIn.readBlob(fileName); byte[] bytes = packIn.readBlob(fileName);
if ("byte[]".equals(dataType)) { if ("byte[]".equals(dataType)) {
@ -275,6 +285,6 @@ public class PoFiller{
} }
} }
} }
po.set_ValueOfColumn(qName, data); po.set_ValueNoCheck(qName, data);
} }
} }

View File

@ -1,7 +1,13 @@
package org.adempiere.pipo2; package org.adempiere.pipo2;
import java.io.UnsupportedEncodingException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties; import java.util.Properties;
import org.adempiere.exceptions.DBException;
import org.apache.commons.codec.binary.Hex;
import org.compiere.model.MTable; import org.compiere.model.MTable;
import org.compiere.model.PO; import org.compiere.model.PO;
import org.compiere.util.DB; import org.compiere.util.DB;
@ -79,25 +85,29 @@ public class ReferenceUtils {
public static String getTableReference(String tableName, String searchColumn, int id, AttributesImpl atts) public static String getTableReference(String tableName, String searchColumn, int id, AttributesImpl atts)
{ {
String keyColumn = tableName + "_ID"; String keyColumn = tableName + "_ID";
String sql = "SELECT " + searchColumn + " FROM "
+ tableName + " WHERE " + keyColumn + " = ?";
if (id > 0 && id <= PackOut.MAX_OFFICIAL_ID) if (id > 0 && id <= PackOut.MAX_OFFICIAL_ID)
{ {
//official id
atts.addAttribute("", "", "reference", "CDATA", "id"); atts.addAttribute("", "", "reference", "CDATA", "id");
String value = Integer.toString(id); String value = Integer.toString(id);
return value; return value;
} }
else if (id == 0) else if (id == 0)
{ {
//no id, should never happen
atts.addAttribute("", "", "reference", "CDATA", "id"); atts.addAttribute("", "", "reference", "CDATA", "id");
return ""; return "";
} }
else else
{ {
MTable table = MTable.get(Env.getCtx(), tableName); MTable table = MTable.get(Env.getCtx(), tableName);
if (table.getColumn(PO.getUUIDColumnName(tableName)) != null) if (table == null)
throw new RuntimeException("Table Not Found. TableName="+tableName);
String uuidColumnName = PO.getUUIDColumnName(tableName);
if (table.getColumn(uuidColumnName) != null)
{ {
sql = "SELECT " + PO.getUUIDColumnName(tableName) + " FROM " //uuid
String sql = "SELECT " + uuidColumnName + " FROM "
+ tableName + " WHERE " + keyColumn + " = ?"; + tableName + " WHERE " + keyColumn + " = ?";
String value = DB.getSQLValueString(null, sql, id); String value = DB.getSQLValueString(null, sql, id);
if (value != null && value.trim().length() > 0) if (value != null && value.trim().length() > 0)
@ -108,6 +118,46 @@ public class ReferenceUtils {
} }
} }
//search column
if (searchColumn.indexOf(",") > 0) {
//composite search column
String value = "";
String[] columns = searchColumn.split("[,]");
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = DB.prepareStatement("SELECT " + searchColumn + " FROM " + tableName, null);
rs = stmt.executeQuery();
if (rs.next()) {
for(int i = 0; i < columns.length; i++) {
Object o = rs.getObject(i+1);
String s = o != null ? o.toString() : "";
if (s.length() > 0) {
char[] chars = Hex.encodeHex(s.getBytes("UTF-8"));
s = new String(chars);
}
if (i == 0) {
value = s;
} else {
value = value+","+s;
}
}
}
} catch (SQLException e) {
throw new DBException(e);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
} finally {
DB.close(rs, stmt);
}
StringBuffer buffer = new StringBuffer();
buffer.append(tableName).append(".").append(searchColumn);
atts.addAttribute("", "", "reference", "CDATA", "table");
atts.addAttribute("", "", "reference-key", "CDATA", buffer.toString());
return value;
} else {
String sql = "SELECT " + searchColumn + " FROM "
+ tableName + " WHERE " + keyColumn + " = ?";
String value = DB.getSQLValueString(null, sql, id); String value = DB.getSQLValueString(null, sql, id);
StringBuffer buffer = new StringBuffer(); StringBuffer buffer = new StringBuffer();
buffer.append(tableName).append(".").append(searchColumn); buffer.append(tableName).append(".").append(searchColumn);
@ -116,6 +166,7 @@ public class ReferenceUtils {
return value; return value;
} }
} }
}
} }