hg merge release-1.0c (forward-porting)
This commit is contained in:
commit
b630f5c6d5
|
@ -0,0 +1,11 @@
|
||||||
|
SET SQLBLANKLINES ON
|
||||||
|
SET DEFINE OFF
|
||||||
|
|
||||||
|
-- Sep 30, 2013 9:09:59 PM COT
|
||||||
|
-- IDEMPIERE-1409 Validate format for AD_User.EMail
|
||||||
|
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Org_ID,Created,AD_Client_ID) VALUES ('E','EMail format is invalid: ',200235,'D','c2fb0472-795b-41ff-806c-1c1e0895e9b3','InvalidEMailFormat','Y',TO_DATE('2013-09-30 21:09:57','YYYY-MM-DD HH24:MI:SS'),100,100,0,TO_DATE('2013-09-30 21:09:57','YYYY-MM-DD HH24:MI:SS'),0)
|
||||||
|
;
|
||||||
|
|
||||||
|
SELECT register_migration_script('201309302110_IDEMPIERE-1409.sql') FROM dual
|
||||||
|
;
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
-- Sep 30, 2013 9:09:59 PM COT
|
||||||
|
-- IDEMPIERE-1409 Validate format for AD_User.EMail
|
||||||
|
INSERT INTO AD_Message (MsgType,MsgText,AD_Message_ID,EntityType,AD_Message_UU,Value,IsActive,Updated,CreatedBy,UpdatedBy,AD_Org_ID,Created,AD_Client_ID) VALUES ('E','EMail format is invalid: ',200235,'D','c2fb0472-795b-41ff-806c-1c1e0895e9b3','InvalidEMailFormat','Y',TO_TIMESTAMP('2013-09-30 21:09:57','YYYY-MM-DD HH24:MI:SS'),100,100,0,TO_TIMESTAMP('2013-09-30 21:09:57','YYYY-MM-DD HH24:MI:SS'),0)
|
||||||
|
;
|
||||||
|
|
||||||
|
SELECT register_migration_script('201309302110_IDEMPIERE-1409.sql') FROM dual
|
||||||
|
;
|
||||||
|
|
|
@ -1168,6 +1168,10 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable
|
||||||
}
|
}
|
||||||
// Prevent New Where Main Record is processed
|
// Prevent New Where Main Record is processed
|
||||||
// but not apply for TabLevel=0 - teo_sarca [ 1673902 ]
|
// but not apply for TabLevel=0 - teo_sarca [ 1673902 ]
|
||||||
|
// hengsin: together with readonly logic, the following validation create confusing situation for user.
|
||||||
|
// i.e, if readonly logic enable the new button on toolbar, it will just does nothing due to the validation below.
|
||||||
|
// better let everything decide using just the tab's readonly logic instead.
|
||||||
|
/*
|
||||||
if (m_vo.TabLevel > 0 && m_vo.TabNo > 0)
|
if (m_vo.TabLevel > 0 && m_vo.TabNo > 0)
|
||||||
{
|
{
|
||||||
boolean processed = isProcessed();
|
boolean processed = isProcessed();
|
||||||
|
@ -1178,7 +1182,7 @@ public class GridTab implements DataStatusListener, Evaluatee, Serializable
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (log.isLoggable(Level.FINEST)) log.finest("Processed=" + processed);
|
if (log.isLoggable(Level.FINEST)) log.finest("Processed=" + processed);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
//hengsin, don't create new when parent is empty
|
//hengsin, don't create new when parent is empty
|
||||||
if (isDetail() && m_parentNeedSave)
|
if (isDetail() && m_parentNeedSave)
|
||||||
|
|
|
@ -1142,10 +1142,14 @@ public final class MSetup
|
||||||
createPreference("C_Country_ID", String.valueOf(C_Country_ID), 0);
|
createPreference("C_Country_ID", String.valueOf(C_Country_ID), 0);
|
||||||
|
|
||||||
// Default Warehouse
|
// Default Warehouse
|
||||||
|
MLocation locwh = new MLocation(m_ctx, C_Country_ID, C_Region_ID, City, m_trx.getTrxName());
|
||||||
|
locwh.setAddress1(address1);
|
||||||
|
locwh.setPostal(postal);
|
||||||
|
locwh.saveEx();
|
||||||
MWarehouse wh = new MWarehouse(m_ctx, 0, m_trx.getTrxName());
|
MWarehouse wh = new MWarehouse(m_ctx, 0, m_trx.getTrxName());
|
||||||
wh.setValue(defaultName);
|
wh.setValue(defaultName);
|
||||||
wh.setName(defaultName);
|
wh.setName(defaultName);
|
||||||
wh.setC_Location_ID(loc.getC_Location_ID());
|
wh.setC_Location_ID(locwh.getC_Location_ID());
|
||||||
if (!wh.save())
|
if (!wh.save())
|
||||||
log.log(Level.SEVERE, "Warehouse NOT inserted");
|
log.log(Level.SEVERE, "Warehouse NOT inserted");
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ import org.adempiere.exceptions.DBException;
|
||||||
import org.compiere.util.CCache;
|
import org.compiere.util.CCache;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
import org.compiere.util.DB;
|
import org.compiere.util.DB;
|
||||||
|
import org.compiere.util.EMail;
|
||||||
import org.compiere.util.Env;
|
import org.compiere.util.Env;
|
||||||
import org.compiere.util.Msg;
|
import org.compiere.util.Msg;
|
||||||
import org.compiere.util.Secure;
|
import org.compiere.util.Secure;
|
||||||
|
@ -896,6 +897,15 @@ public class MUser extends X_AD_User
|
||||||
// New Address invalidates verification
|
// New Address invalidates verification
|
||||||
if (!newRecord && is_ValueChanged("EMail"))
|
if (!newRecord && is_ValueChanged("EMail"))
|
||||||
setEMailVerifyDate(null);
|
setEMailVerifyDate(null);
|
||||||
|
|
||||||
|
// IDEMPIERE-1409
|
||||||
|
if (getEMail() != null && (newRecord || is_ValueChanged("EMail"))) {
|
||||||
|
if (! EMail.validate(getEMail())) {
|
||||||
|
log.saveError("SaveError", Msg.getMsg(getCtx(), "InvalidEMailFormat") + Msg.getElement(getCtx(), COLUMNNAME_EMail) + " - [" + getEMail() + "]");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (newRecord || super.getValue() == null || is_ValueChanged("Value"))
|
if (newRecord || super.getValue() == null || is_ValueChanged("Value"))
|
||||||
setValue(super.getValue());
|
setValue(super.getValue());
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,8 @@ import java.util.Collection;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import javax.activation.DataHandler;
|
import javax.activation.DataHandler;
|
||||||
import javax.activation.DataSource;
|
import javax.activation.DataSource;
|
||||||
|
@ -71,7 +73,8 @@ public final class EMail implements Serializable
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
private static final long serialVersionUID = -1408649015285763245L;
|
private static final long serialVersionUID = -5857825644737211294L;
|
||||||
|
|
||||||
//use in server bean
|
//use in server bean
|
||||||
public final static String HTML_MAIL_MARKER = "ContentType=text/html;";
|
public final static String HTML_MAIL_MARKER = "ContentType=text/html;";
|
||||||
/**
|
/**
|
||||||
|
@ -1092,6 +1095,18 @@ public final class EMail implements Serializable
|
||||||
return sb.toString ();
|
return sb.toString ();
|
||||||
} // toString
|
} // toString
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate format of an email address
|
||||||
|
* IDEMPIERE-1409 - based on http://examples.javacodegeeks.com/core-java/util/regex/matcher/validate-email-address-with-java-regular-expression-example/
|
||||||
|
* @return true if email has proper format
|
||||||
|
*/
|
||||||
|
private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
|
||||||
|
private static Pattern pattern = Pattern.compile(EMAIL_PATTERN);
|
||||||
|
public static boolean validate(final String email) {
|
||||||
|
Matcher matcher = pattern.matcher(email);
|
||||||
|
return matcher.matches();
|
||||||
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* Test.
|
* Test.
|
||||||
* java -cp CTools.jar;CClient.jar org.compiere.util.EMail main info@adempiere.org jjanke@adempiere.org "My Subject" "My Message"
|
* java -cp CTools.jar;CClient.jar org.compiere.util.EMail main info@adempiere.org jjanke@adempiere.org "My Subject" "My Message"
|
||||||
|
|
|
@ -172,7 +172,7 @@ public class ReportStarter implements ProcessCall, ClientProcess
|
||||||
fout.close();
|
fout.close();
|
||||||
return downloadedFile;
|
return downloadedFile;
|
||||||
} catch (FileNotFoundException e) {
|
} catch (FileNotFoundException e) {
|
||||||
if(reportLocation.indexOf("Subreport") == -1) // Only show the warning if it is not a subreport
|
if(reportLocation.indexOf("Subreport") == -1 && !reportLocation.endsWith(".properties")) // Only show the warning if it is not a subreport or properties
|
||||||
log.warning("404 not found: Report cannot be found on server "+ e.getMessage());
|
log.warning("404 not found: Report cannot be found on server "+ e.getMessage());
|
||||||
return null;
|
return null;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -424,7 +424,7 @@ public class ReportStarter implements ProcessCall, ClientProcess
|
||||||
String resourcePath = reportDir.getAbsolutePath();
|
String resourcePath = reportDir.getAbsolutePath();
|
||||||
if (!resourcePath.endsWith("/") && !resourcePath.endsWith("\\"));
|
if (!resourcePath.endsWith("/") && !resourcePath.endsWith("\\"));
|
||||||
{
|
{
|
||||||
resourcePath = resourcePath + "/";
|
resourcePath = resourcePath + File.separator;
|
||||||
}
|
}
|
||||||
params.put("SUBREPORT_DIR", resourcePath);
|
params.put("SUBREPORT_DIR", resourcePath);
|
||||||
if (reportPath.startsWith("http://") || reportPath.startsWith("https://")) {
|
if (reportPath.startsWith("http://") || reportPath.startsWith("https://")) {
|
||||||
|
@ -515,7 +515,8 @@ public class ReportStarter implements ProcessCall, ClientProcess
|
||||||
}
|
}
|
||||||
else if (reportPath.startsWith("resource:"))
|
else if (reportPath.startsWith("resource:"))
|
||||||
{
|
{
|
||||||
subreports = getResourceSubreports(name+ "Subreport", reportPath, fileExtension);
|
String path = reportPath.substring(0, reportPath.length() +1 - (name+"."+fileExtension).length());
|
||||||
|
subreports = getResourceSubreports(name+ "Subreport", path, fileExtension);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -585,26 +586,25 @@ public class ReportStarter implements ProcessCall, ClientProcess
|
||||||
|
|
||||||
// Resources
|
// Resources
|
||||||
File resFile = null;
|
File resFile = null;
|
||||||
|
String bundleName = jasperReport.getResourceBundle();
|
||||||
|
if (bundleName == null) {
|
||||||
|
// If bundle name is not set, use the same name as the report file (legacy behaviour)
|
||||||
|
bundleName = jasperName;
|
||||||
|
}
|
||||||
if (reportPath.startsWith("attachment:") && attachment != null) {
|
if (reportPath.startsWith("attachment:") && attachment != null) {
|
||||||
resFile = getAttachmentResourceFile(jasperName, currLang);
|
resFile = getAttachmentResourceFile(bundleName, currLang);
|
||||||
} else if (reportPath.startsWith("resource:")) {
|
} else if (reportPath.startsWith("resource:")) {
|
||||||
resFile = getResourcesForResourceFile(jasperName, currLang);
|
resFile = getResourceResourceFile("resource:" + bundleName, currLang);
|
||||||
|
} else if (reportPath.startsWith("http://") || reportPath.startsWith("https://")) {
|
||||||
|
resFile = getHttpResourceFile(reportPath, bundleName, currLang);
|
||||||
} else {
|
} else {
|
||||||
resFile = new File(jasperName+"_"+currLang.getLocale().getLanguage()+".properties");
|
resFile = getFileResourceFile(resourcePath, bundleName, currLang);
|
||||||
if (!resFile.exists()) {
|
|
||||||
resFile = null;
|
|
||||||
}
|
|
||||||
if (resFile == null) {
|
|
||||||
resFile = new File(jasperName+".properties");
|
|
||||||
if (!resFile.exists()) {
|
|
||||||
resFile = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (resFile!=null) {
|
if (resFile!=null) {
|
||||||
try {
|
try {
|
||||||
PropertyResourceBundle res = new PropertyResourceBundle( new FileInputStream(resFile));
|
PropertyResourceBundle res = new PropertyResourceBundle( new FileInputStream(resFile));
|
||||||
params.put("RESOURCE", res);
|
params.put("RESOURCE", res);
|
||||||
|
params.put(JRParameter.REPORT_RESOURCE_BUNDLE, res);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
@ -783,47 +783,113 @@ public class ReportStarter implements ProcessCall, ClientProcess
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get .property resource file from process attachment
|
* Get .property resource file from process attachment
|
||||||
* @param jasperName
|
* @param bundleName
|
||||||
* @param currLang
|
* @param currLang
|
||||||
* @return File
|
* @return File
|
||||||
*/
|
*/
|
||||||
private File getAttachmentResourceFile(String jasperName, Language currLang) {
|
private File getAttachmentResourceFile(String bundleName, Language currLang) {
|
||||||
File resFile = null;
|
String resname = bundleName+"_"+currLang.getLocale().getLanguage()+"_"+currLang.getLocale().getCountry()+".properties";
|
||||||
MAttachmentEntry[] entries = attachment.getEntries();
|
File resFile = getAttachmentEntryFile(resname);
|
||||||
// try baseName + "_" + language
|
if (resFile == null) {
|
||||||
String resname = jasperName + "_" + currLang.getLocale().getLanguage() + ".properties";
|
resname = bundleName+"_"+currLang.getLocale().getLanguage()+".properties";
|
||||||
|
resFile = getAttachmentEntryFile(resname);
|
||||||
|
if (resFile == null) {
|
||||||
|
resname = bundleName+".properties";
|
||||||
|
resFile = getAttachmentEntryFile(resname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
private File getAttachmentEntryFile(String resname) {
|
||||||
|
File fileattach = null;
|
||||||
|
MAttachmentEntry[] entries = attachment.getEntries();
|
||||||
for( int i=0; i<entries.length; i++) {
|
for( int i=0; i<entries.length; i++) {
|
||||||
if (entries[i].getName().equals(resname)) {
|
if (entries[i].getName().equals(resname)) {
|
||||||
resFile = getAttachmentEntryFile(entries[i]);
|
fileattach = getAttachmentEntryFile(entries[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (resFile==null) {
|
return fileattach;
|
||||||
// try baseName only
|
|
||||||
resname = jasperName + ".properties";
|
|
||||||
for( int i=0; i<entries.length; i++) {
|
|
||||||
if (entries[i].getName().equals(resname)) {
|
|
||||||
resFile = getAttachmentEntryFile(entries[i]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return resFile;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get .property resource file from resources
|
* Get .property resource file from resources
|
||||||
* @param jasperName
|
* @param bundleName
|
||||||
* @param currLang
|
* @param currLang
|
||||||
* @return File
|
* @return File
|
||||||
*/
|
*/
|
||||||
private File getResourcesForResourceFile(String jasperName, Language currLang) {
|
private File getResourceResourceFile(String bundleName, Language currLang) {
|
||||||
File resFile = null;
|
String resname = bundleName+"_"+currLang.getLocale().getLanguage()+"_"+currLang.getLocale().getCountry()+".properties";
|
||||||
|
File resFile = null;
|
||||||
try {
|
try {
|
||||||
resFile = getFileAsResource(jasperName+"_"+currLang.getLocale().getLanguage()+".properties");
|
resFile = getFileAsResource(resname);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// ignore exception - file couldn't exist
|
// ignore exception - file couldn't exist
|
||||||
}
|
}
|
||||||
|
if (resFile == null) {
|
||||||
|
resname = bundleName+"_"+currLang.getLocale().getLanguage()+".properties";
|
||||||
|
try {
|
||||||
|
resFile = getFileAsResource(resname);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// ignore exception - file couldn't exist
|
||||||
|
}
|
||||||
|
if (resFile == null) {
|
||||||
|
resname = bundleName+".properties";
|
||||||
|
try {
|
||||||
|
resFile = getFileAsResource(resname);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// ignore exception - file couldn't exist
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get .property resource file from http URL
|
||||||
|
* @param reportPath
|
||||||
|
* @param bundleName
|
||||||
|
* @param currLang
|
||||||
|
* @return File
|
||||||
|
*/
|
||||||
|
private File getHttpResourceFile(String reportPath, String bundleName, Language currLang)
|
||||||
|
{
|
||||||
|
String remoteDir = reportPath.substring(0, reportPath.lastIndexOf("/"));
|
||||||
|
String resname = bundleName+"_"+currLang.getLocale().getLanguage()+"_"+currLang.getLocale().getCountry()+".properties";
|
||||||
|
File resFile = httpDownloadedReport(remoteDir + "/" + resname);
|
||||||
|
if (resFile == null) {
|
||||||
|
resname = bundleName+"_"+currLang.getLocale().getLanguage()+".properties";
|
||||||
|
resFile = httpDownloadedReport(remoteDir + "/" + resname);
|
||||||
|
if (resFile == null) {
|
||||||
|
resname = bundleName+".properties";
|
||||||
|
resFile = httpDownloadedReport(remoteDir + "/" + resname);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get .property resource file from file://
|
||||||
|
* @param resourcePath
|
||||||
|
* @param bundleName
|
||||||
|
* @param currLang
|
||||||
|
* @return File
|
||||||
|
*/
|
||||||
|
private File getFileResourceFile(String resourcePath, String bundleName, Language currLang) {
|
||||||
|
String resname = bundleName+"_"+currLang.getLocale().getLanguage()+"_"+currLang.getLocale().getCountry()+".properties";
|
||||||
|
File resFile = new File(resourcePath, resname);
|
||||||
|
if (! resFile.exists()) {
|
||||||
|
resname = bundleName+"_"+currLang.getLocale().getLanguage()+".properties";
|
||||||
|
resFile = new File(resourcePath, resname);
|
||||||
|
if (! resFile.exists()) {
|
||||||
|
resname = bundleName+".properties";
|
||||||
|
resFile = new File(resourcePath, resname);
|
||||||
|
if (! resFile.exists()) {
|
||||||
|
resFile = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return resFile;
|
return resFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -864,15 +930,13 @@ public class ReportStarter implements ProcessCall, ClientProcess
|
||||||
private File[] getResourceSubreports(String reportName, String reportPath, String fileExtension)
|
private File[] getResourceSubreports(String reportName, String reportPath, String fileExtension)
|
||||||
{
|
{
|
||||||
ArrayList<File> subreports = new ArrayList<File>();
|
ArrayList<File> subreports = new ArrayList<File>();
|
||||||
String remoteDir = reportPath.substring(0, reportPath.lastIndexOf("/"));
|
|
||||||
|
|
||||||
// Currently check hardcoded for max. 10 subreports
|
// Currently check hardcoded for max. 10 subreports
|
||||||
for(int i=1; i<10; i++)
|
for(int i=1; i<10; i++)
|
||||||
{
|
{
|
||||||
// Check if subreport number i exists
|
// Check if subreport number i exists
|
||||||
File subreport = null;
|
File subreport = null;
|
||||||
try {
|
try {
|
||||||
subreport = getFileAsResource(remoteDir + "/" + reportName + i + fileExtension);
|
subreport = getFileAsResource(reportPath + reportName + i + fileExtension);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
// just ignore it
|
// just ignore it
|
||||||
}
|
}
|
||||||
|
@ -960,18 +1024,31 @@ public class ReportStarter implements ProcessCall, ClientProcess
|
||||||
if (log.isLoggable(Level.INFO)) log.info("localFile = " + localFile);
|
if (log.isLoggable(Level.INFO)) log.info("localFile = " + localFile);
|
||||||
reportFile = new File(localFile);
|
reportFile = new File(localFile);
|
||||||
|
|
||||||
|
boolean empty = true;
|
||||||
OutputStream out = null;
|
OutputStream out = null;
|
||||||
out = new FileOutputStream(reportFile);
|
try {
|
||||||
if (out != null){
|
out = new FileOutputStream(reportFile);
|
||||||
byte buf[]=new byte[1024];
|
if (out != null){
|
||||||
int len;
|
byte buf[]=new byte[1024];
|
||||||
while((len=inputStream.read(buf))>0)
|
int len;
|
||||||
out.write(buf,0,len);
|
while((len=inputStream.read(buf))>0) {
|
||||||
out.close();
|
empty = false;
|
||||||
inputStream.close();
|
out.write(buf,0,len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw e;
|
||||||
|
} finally {
|
||||||
|
if (out != null)
|
||||||
|
out.close();
|
||||||
|
if (inputStream != null)
|
||||||
|
inputStream.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
return reportFile;
|
if (empty)
|
||||||
|
return null;
|
||||||
|
else
|
||||||
|
return reportFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1176,10 +1253,24 @@ public class ReportStarter implements ProcessCall, ClientProcess
|
||||||
if (para != null) {
|
if (para != null) {
|
||||||
for (int i = 0; i < para.length; i++) {
|
for (int i = 0; i < para.length; i++) {
|
||||||
if (para[i].getParameter_To() == null) {
|
if (para[i].getParameter_To() == null) {
|
||||||
params.put(para[i].getParameterName(), para[i].getParameter());
|
if (para[i].getParameterName().endsWith("_ID") && para[i].getParameter() instanceof BigDecimal) {
|
||||||
|
params.put(para[i].getParameterName(), ((BigDecimal)para[i].getParameter()).intValue());
|
||||||
|
} else {
|
||||||
|
params.put(para[i].getParameterName(), para[i].getParameter());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
params.put( para[i].getParameterName()+"1", para[i].getParameter());
|
// range - from
|
||||||
params.put( para[i].getParameterName()+"2", para[i].getParameter_To());
|
if (para[i].getParameterName().endsWith("_ID") && para[i].getParameter() != null && para[i].getParameter() instanceof BigDecimal) {
|
||||||
|
params.put( para[i].getParameterName()+"1", ((BigDecimal)para[i].getParameter()).intValue());
|
||||||
|
} else {
|
||||||
|
params.put( para[i].getParameterName()+"1", para[i].getParameter());
|
||||||
|
}
|
||||||
|
// range - to
|
||||||
|
if (para[i].getParameterName().endsWith("_ID") && para[i].getParameter_To() instanceof BigDecimal) {
|
||||||
|
params.put( para[i].getParameterName()+"2", ((BigDecimal)para[i].getParameter_To()).intValue());
|
||||||
|
} else {
|
||||||
|
params.put( para[i].getParameterName()+"2", para[i].getParameter_To());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1173,7 +1173,18 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements
|
||||||
{
|
{
|
||||||
Object value = Executions.getCurrent().removeAttribute(CompositeADTabbox.AD_TABBOX_ON_EDIT_DETAIL_ATTRIBUTE);
|
Object value = Executions.getCurrent().removeAttribute(CompositeADTabbox.AD_TABBOX_ON_EDIT_DETAIL_ATTRIBUTE);
|
||||||
if (value != newTabpanel)
|
if (value != newTabpanel)
|
||||||
|
{
|
||||||
newTabpanel.query();
|
newTabpanel.query();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//detail pane of the new header tab might need refresh
|
||||||
|
if (newTabpanel instanceof ADTabpanel)
|
||||||
|
{
|
||||||
|
ADTabpanel adtabpanel = (ADTabpanel) newTabpanel;
|
||||||
|
Events.echoEvent(ADTabpanel.ON_POST_INIT_EVENT, adtabpanel, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -31,7 +31,9 @@ bin.includes = META-INF/,\
|
||||||
OSGI-INF/defaultcreatefromfactory.xml,\
|
OSGI-INF/defaultcreatefromfactory.xml,\
|
||||||
OSGI-INF/defaultformfactory.xml,\
|
OSGI-INF/defaultformfactory.xml,\
|
||||||
OSGI-INF/feedbackservice.xml,\
|
OSGI-INF/feedbackservice.xml,\
|
||||||
sessiontimeout.zul
|
sessiontimeout.zul,\
|
||||||
|
*.jsp,\
|
||||||
|
labelapplet.jar
|
||||||
src.includes = WEB-INF/classes/,\
|
src.includes = WEB-INF/classes/,\
|
||||||
WEB-INF/tld/,\
|
WEB-INF/tld/,\
|
||||||
WEB-INF/web.xml,\
|
WEB-INF/web.xml,\
|
||||||
|
|
|
@ -641,6 +641,10 @@ div.wc-modal, div.wc-modal-none, div.wc-highlighted, div.wc-highlighted-none {
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dashboard-widget.dashboard-widget-max > .z-panel-body > .z-panelchildren {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
.dashboard-report-iframe {
|
.dashboard-report-iframe {
|
||||||
min-height:300px;
|
min-height:300px;
|
||||||
border: 1px solid lightgray;
|
border: 1px solid lightgray;
|
||||||
|
|
|
@ -62,3 +62,4 @@ Import-Package: fit,
|
||||||
org.idempiere.fitnesse.server.slim,
|
org.idempiere.fitnesse.server.slim,
|
||||||
org.osgi.framework;version="1.3.0"
|
org.osgi.framework;version="1.3.0"
|
||||||
Service-Component: OSGI-INF/fitfixturefactory.xml, OSGI-INF/slimfixturefactory.xml
|
Service-Component: OSGI-INF/fitfixturefactory.xml, OSGI-INF/slimfixturefactory.xml
|
||||||
|
Export-Package: org.idempiere.fitnesse.fixture
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<classpath>
|
<classpath>
|
||||||
<classpathentry kind="src" path="src"/>
|
<classpathentry kind="src" path="src"/>
|
||||||
|
<classpathentry exported="true" kind="lib" path="lib/selenium-server-standalone-2.35.0.jar" sourcepath="lib/selenium-server-2.35.0-srcs.jar"/>
|
||||||
<classpathentry exported="true" kind="lib" path="lib/phantomjsdriver-1.0.3.jar"/>
|
<classpathentry exported="true" kind="lib" path="lib/phantomjsdriver-1.0.3.jar"/>
|
||||||
<classpathentry exported="true" kind="lib" path="lib/selenium-server-standalone-2.31.0.jar" sourcepath="lib/selenium-server-2.31.0-sources.jar"/>
|
|
||||||
<classpathentry exported="true" kind="lib" path="lib/fitlibraryweb-2.0.jar" sourcepath="lib/fitlibraryweb-2.0-sources.jar"/>
|
<classpathentry exported="true" kind="lib" path="lib/fitlibraryweb-2.0.jar" sourcepath="lib/fitlibraryweb-2.0-sources.jar"/>
|
||||||
<classpathentry exported="true" kind="lib" path="lib/log4j-1.2.16.jar"/>
|
<classpathentry exported="true" kind="lib" path="lib/log4j-1.2.16.jar"/>
|
||||||
<classpathentry exported="true" kind="lib" path="lib/fitnesse.jar"/>
|
<classpathentry exported="true" kind="lib" path="lib/fitnesse.jar"/>
|
||||||
|
|
|
@ -18,7 +18,7 @@ Bundle-ClassPath: .,
|
||||||
lib/fitnesse.jar,
|
lib/fitnesse.jar,
|
||||||
lib/log4j-1.2.16.jar,
|
lib/log4j-1.2.16.jar,
|
||||||
lib/fitlibraryweb-2.0.jar,
|
lib/fitlibraryweb-2.0.jar,
|
||||||
lib/selenium-server-standalone-2.31.0.jar,
|
lib/selenium-server-standalone-2.35.0.jar,
|
||||||
lib/phantomjsdriver-1.0.3.jar
|
lib/phantomjsdriver-1.0.3.jar
|
||||||
Web-ContextPath: fitnesse
|
Web-ContextPath: fitnesse
|
||||||
Export-Package: fit,
|
Export-Package: fit,
|
||||||
|
@ -290,7 +290,6 @@ Export-Package: fit,
|
||||||
org.openqa.selenium.interactions.internal,
|
org.openqa.selenium.interactions.internal,
|
||||||
org.openqa.selenium.interactions.touch,
|
org.openqa.selenium.interactions.touch,
|
||||||
org.openqa.selenium.internal,
|
org.openqa.selenium.internal,
|
||||||
org.openqa.selenium.internal.selenesedriver,
|
|
||||||
org.openqa.selenium.internal.seleniumemulation,
|
org.openqa.selenium.internal.seleniumemulation,
|
||||||
org.openqa.selenium.io,
|
org.openqa.selenium.io,
|
||||||
org.openqa.selenium.iphone,
|
org.openqa.selenium.iphone,
|
||||||
|
@ -323,7 +322,6 @@ Export-Package: fit,
|
||||||
org.openqa.selenium.server.cli,
|
org.openqa.selenium.server.cli,
|
||||||
org.openqa.selenium.server.commands,
|
org.openqa.selenium.server.commands,
|
||||||
org.openqa.selenium.server.htmlrunner,
|
org.openqa.selenium.server.htmlrunner,
|
||||||
org.openqa.selenium.server.log,
|
|
||||||
org.openqa.selenium.support,
|
org.openqa.selenium.support,
|
||||||
org.openqa.selenium.support.events,
|
org.openqa.selenium.support.events,
|
||||||
org.openqa.selenium.support.events.internal,
|
org.openqa.selenium.support.events.internal,
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
<!-- Slim Servlet -->
|
<!-- Slim Servlet -->
|
||||||
<servlet>
|
<servlet>
|
||||||
<servlet-name>SlimServlet</servlet-name>
|
<servlet-name>SlimServlet</servlet-name>
|
||||||
<servlet-class>org.idemiere.fitnesse.server.slim.SlimServlet</servlet-class>
|
<servlet-class>org.idempiere.fitnesse.server.slim.SlimServlet</servlet-class>
|
||||||
</servlet>
|
</servlet>
|
||||||
|
|
||||||
<servlet-mapping>
|
<servlet-mapping>
|
||||||
|
|
|
@ -7,5 +7,5 @@ bin.includes = META-INF/,\
|
||||||
lib/log4j-1.2.16.jar,\
|
lib/log4j-1.2.16.jar,\
|
||||||
lib/fitlibraryweb-2.0.jar,\
|
lib/fitlibraryweb-2.0.jar,\
|
||||||
WEB-INF/,\
|
WEB-INF/,\
|
||||||
lib/selenium-server-standalone-2.31.0.jar,\
|
lib/phantomjsdriver-1.0.3.jar,\
|
||||||
lib/phantomjsdriver-1.0.3.jar
|
lib/selenium-server-standalone-2.35.0.jar
|
||||||
|
|
|
@ -290,7 +290,6 @@ Import-Package: fit,
|
||||||
org.openqa.selenium.interactions.internal,
|
org.openqa.selenium.interactions.internal,
|
||||||
org.openqa.selenium.interactions.touch,
|
org.openqa.selenium.interactions.touch,
|
||||||
org.openqa.selenium.internal,
|
org.openqa.selenium.internal,
|
||||||
org.openqa.selenium.internal.selenesedriver,
|
|
||||||
org.openqa.selenium.internal.seleniumemulation,
|
org.openqa.selenium.internal.seleniumemulation,
|
||||||
org.openqa.selenium.io,
|
org.openqa.selenium.io,
|
||||||
org.openqa.selenium.iphone,
|
org.openqa.selenium.iphone,
|
||||||
|
@ -323,7 +322,6 @@ Import-Package: fit,
|
||||||
org.openqa.selenium.server.cli,
|
org.openqa.selenium.server.cli,
|
||||||
org.openqa.selenium.server.commands,
|
org.openqa.selenium.server.commands,
|
||||||
org.openqa.selenium.server.htmlrunner,
|
org.openqa.selenium.server.htmlrunner,
|
||||||
org.openqa.selenium.server.log,
|
|
||||||
org.openqa.selenium.support,
|
org.openqa.selenium.support,
|
||||||
org.openqa.selenium.support.events,
|
org.openqa.selenium.support.events,
|
||||||
org.openqa.selenium.support.events.internal,
|
org.openqa.selenium.support.events.internal,
|
||||||
|
|
|
@ -2,6 +2,6 @@
|
||||||
<classpath>
|
<classpath>
|
||||||
<classpathentry kind="src" path="src"/>
|
<classpathentry kind="src" path="src"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
||||||
<classpathentry kind="lib" path="/org.idempiere.fitnesse.server/lib/selenium-server-standalone-2.31.0.jar" sourcepath="/org.idempiere.fitnesse.server/lib/selenium-server-2.31.0-sources.jar"/>
|
<classpathentry kind="lib" path="/org.idempiere.fitnesse.server/lib/selenium-server-standalone-2.35.0.jar" sourcepath="/org.idempiere.fitnesse.server/lib/selenium-server-2.31.0-sources.jar"/>
|
||||||
<classpathentry kind="output" path="bin"/>
|
<classpathentry kind="output" path="bin"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|
|
@ -3,6 +3,6 @@
|
||||||
<classpathentry kind="src" path="src"/>
|
<classpathentry kind="src" path="src"/>
|
||||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
||||||
<classpathentry kind="lib" path="lib/ztl-2.0.0-SNAPSHOT.jar" sourcepath="lib/ztl-2.0.0-sources.jar"/>
|
<classpathentry kind="lib" path="lib/ztl-2.0.0-SNAPSHOT.jar" sourcepath="lib/ztl-2.0.0-sources.jar"/>
|
||||||
<classpathentry kind="lib" path="/org.idempiere.fitnesse.server/lib/selenium-server-standalone-2.31.0.jar" sourcepath="/org.idempiere.fitnesse.server/lib/selenium-server-2.31.0-sources.jar"/>
|
<classpathentry kind="lib" path="/org.idempiere.fitnesse.server/lib/selenium-server-standalone-2.35.0.jar" sourcepath="/org.idempiere.fitnesse.server/lib/selenium-server-2.31.0-sources.jar"/>
|
||||||
<classpathentry kind="output" path="bin"/>
|
<classpathentry kind="output" path="bin"/>
|
||||||
</classpath>
|
</classpath>
|
||||||
|
|
Loading…
Reference in New Issue