/****************************************************************************** * Product: Adempiere ERP & CRM Smart Business Solution * * Copyright (C) 1999-2006 Adempiere, Inc. All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * * under the terms version 2 of the GNU General Public License as published * * by the Free Software Foundation. This program is distributed in the hope * * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * * with this program; if not, write to the Free Software Foundation, Inc., * * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. * * * * Copyright (C) * * 2004 Robert KLEIN. robeklein@hotmail.com * * Contributor(s): Low Heng Sin hengsin@avantz.com * * Teo Sarca teo.sarca@arhipac.ro, SC ARHIPAC SERVICE SRL * *****************************************************************************/ package org.adempiere.pipo2; import java.io.File; import java.sql.Timestamp; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.logging.Level; import org.compiere.model.I_AD_EntityType; import org.compiere.model.I_AD_Form; import org.compiere.model.I_AD_ImpFormat; import org.compiere.model.I_AD_InfoWindow; import org.compiere.model.I_AD_Menu; import org.compiere.model.I_AD_Message; import org.compiere.model.I_AD_ModelValidator; import org.compiere.model.I_AD_PrintFormat; import org.compiere.model.I_AD_Process; import org.compiere.model.I_AD_Reference; import org.compiere.model.I_AD_ReportView; import org.compiere.model.I_AD_Role; import org.compiere.model.I_AD_Table; import org.compiere.model.I_AD_Val_Rule; import org.compiere.model.I_AD_Window; import org.compiere.model.I_AD_Workflow; import org.compiere.model.MPackageExp; import org.compiere.model.MPackageExpDetail; import org.compiere.model.MTable; import org.compiere.model.Query; import org.compiere.model.X_AD_Package_Exp_Detail; import org.compiere.process.SvrProcess; import org.compiere.util.Env; /** * Convert AD to XML * * @author Robert Klein * @version $Id: PackOut.java,v 1.0 * * Contributor: William G. Heath - Export of workflows and dynamic validations * * @author Teo Sarca, SC ARHIPAC SERVICE SRL *
  • BF [ 1819315 ] PackOut: fix xml indentation not working *
  • BF [ 1819319 ] PackOut: use just active AD_Package_Exp_Detail lines */ public class PackOutProcess extends SvrProcess { /** Record ID */ private int p_PackOut_ID = 0; private MPackageExp packageExp; private String packoutDirectory; /** * Prepare - e.g., get Parameters. */ protected void prepare() { p_PackOut_ID = getRecord_ID(); } // prepare /** * Start the transformation to XML * @return info * @throws Exception */ protected String doIt() throws java.lang.Exception { if (log.isLoggable(Level.INFO)) log.info("doIt - AD_PACKAGE_EXP_ID=" + p_PackOut_ID); if (p_PackOut_ID == 0) throw new IllegalArgumentException("No Record"); int processedCount = 0; String exportFile = ""; try { packageExp = new MPackageExp(getCtx(), p_PackOut_ID, get_TrxName()); if (packageExp.getAD_Package_Exp_ID() == p_PackOut_ID){ //Create the package documentation packoutDirectory = System.getProperty("java.io.tmpdir"); if (!packoutDirectory.endsWith("/") && !packoutDirectory.endsWith("\\")) packoutDirectory+= File.separator; packoutDirectory = packoutDirectory + "packout" + Env.getContext(getCtx(), Env.AD_USER_ID) + 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(), packageExp.getDescription(), packageExp.getInstructions(), packageExp.getUserName(), packageExp.getEMail(), packageExp.getCreated(), packageExp.getUpdated()); List packoutItems = new ArrayList(); Query query = new Query(getCtx(), MTable.get(getCtx(), X_AD_Package_Exp_Detail.Table_ID), "AD_Package_Exp_ID = ?", get_TrxName()); List packageExpDetails = query.setOnlyActiveRecords(true) .setOrderBy("Line") .setParameters(new Object[]{p_PackOut_ID}) .list(); for(MPackageExpDetail dtl : packageExpDetails){ String type = getTypeName(dtl.getType()); if (log.isLoggable(Level.INFO)) log.info(Integer.toString(dtl.getLine())); PackoutItem item = new PackoutItem(type, dtl.getExpRecordId(), getExpProperties(dtl)); packoutItems.add(item); } PackOut packOut = new PackOut(); packOut.setCtx(getCtx()); Timestamp dateFromValue = packageExp.getDateFrom(); if (dateFromValue != null) { packOut.setFromDate((Timestamp) dateFromValue); } packOut.setExportDictionaryEntity(packageExp.isExportDictionaryEntity()); packOut.export(packoutDirectory, null, packoutDocument, packoutItems, get_TrxName()); processedCount = packOut.getExportCount(); exportFile = packOut.getExportFile(); } } catch (Exception e) { log.log(Level.SEVERE,e.getLocalizedMessage(), e); throw e; } if (processUI != null) processUI.download(new File(exportFile)); return "Exported="+processedCount + " File=" + exportFile; } // doIt private String getTypeName(String type) { if (X_AD_Package_Exp_Detail.TYPE_ApplicationOrModule.equals(type)) return I_AD_Menu.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_Data.equals(type)) return IHandlerRegistry.TABLE_GENERIC_HANDLER; else if (X_AD_Package_Exp_Detail.TYPE_DataSingle.equals(type)) return IHandlerRegistry.TABLE_GENERIC_SINGLE_HANDLER; else if (X_AD_Package_Exp_Detail.TYPE_DynamicValidationRule.equals(type)) return I_AD_Val_Rule.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_Form.equals(type)) return I_AD_Form.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_ImportFormat.equals(type)) return I_AD_ImpFormat.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_Message.equals(type)) return I_AD_Message.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_PrintFormat.equals(type)) return I_AD_PrintFormat.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_ProcessReport.equals(type)) return I_AD_Process.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_Reference.equals(type)) return I_AD_Reference.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_ReportView.equals(type)) return I_AD_ReportView.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_Role.equals(type)) return I_AD_Role.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_SQLStatement.equals(type)) return "SQLStatement"; else if (X_AD_Package_Exp_Detail.TYPE_SQLMandatory.equals(type)) return "SQLMandatory"; else if (X_AD_Package_Exp_Detail.TYPE_Table.equals(type)) return I_AD_Table.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_Window.equals(type)) return I_AD_Window.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_Workflow.equals(type)) return I_AD_Workflow.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_ModelValidator.equals(type)) return I_AD_ModelValidator.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_EntityType.equals(type)) return I_AD_EntityType.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_InfoWindow.equals(type)) return I_AD_InfoWindow.Table_Name; else if (X_AD_Package_Exp_Detail.TYPE_ShellScript.equals(type)) return "ShellScript"; else if (X_AD_Package_Exp_Detail.TYPE_ScriptJSR223.equals(type)) return "ScriptJSR223"; return type; } private Map getExpProperties(MPackageExpDetail dtl) { Map properties = new HashMap(); String type = dtl.getType(); if (MPackageExpDetail.TYPE_Data.equals(type) || MPackageExpDetail.TYPE_DataSingle.equals(type)) { properties.put(DataElementParameters.AD_TABLE_ID, dtl.getAD_Table_ID()); properties.put(DataElementParameters.SQL_STATEMENT, dtl.getSQLStatement()); } else if (MPackageExpDetail.TYPE_SQLStatement.equals(type) || MPackageExpDetail.TYPE_SQLMandatory.equals(type)) { properties.put(SQLElementParameters.SQL_STATEMENT, dtl.getSQLStatement()); properties.put(SQLElementParameters.DB_TYPE, dtl.getDBType()); } else if (MPackageExpDetail.TYPE_ShellScript.equals(type) || MPackageExpDetail.TYPE_ScriptJSR223.equals(type)) { properties.put(MPackageExpDetail.COLUMNNAME_ExecCode, dtl.getExecCode()); } return properties; } } // PackOut