details:   https://code.openbravo.com/erp/devel/pi/rev/ea70861b5474
changeset: 22639:ea70861b5474
user:      Shankar Balachandran <shankar.balachandran <at> openbravo.com>
date:      Thu Mar 06 17:53:50 2014 +0530
summary:   Fixes Issue 0025557: Is not possible to enter more than one 
datasource table in ORACLE

Dropped constraint AD_TABLE_CLASSNAME_PACKAGE_UN as it is not accepting null 
values in Oracle.
Added event handler to handle the same logic.

diffstat:

 src-db/database/model/tables/AD_TABLE.xml        |   4 -
 src-db/database/sourcedata/AD_MESSAGE.xml        |  13 +++
 src/org/openbravo/event/ADTableEventHandler.java |  94 ++++++++++++++++++++++++
 3 files changed, 107 insertions(+), 4 deletions(-)

diffs (135 lines):

diff -r 7b3a543035a2 -r ea70861b5474 src-db/database/model/tables/AD_TABLE.xml
--- a/src-db/database/model/tables/AD_TABLE.xml Thu Mar 06 13:22:06 2014 +0530
+++ b/src-db/database/model/tables/AD_TABLE.xml Thu Mar 06 17:53:50 2014 +0530
@@ -158,10 +158,6 @@
       <foreign-key foreignTable="AD_WINDOW" name="AD_WINDOW_TABLE" 
onDelete="setnull">
         <reference local="AD_WINDOW_ID" foreign="AD_WINDOW_ID"/>
       </foreign-key>
-      <index name="AD_TABLE_CLASSNAME_PACKAGE_UN" unique="true">
-        <index-column name="CLASSNAME"/>
-        <index-column name="AD_PACKAGE_ID"/>
-      </index>
       <index name="AD_TABLE_PACKAGE_IDX" unique="false">
         <index-column name="AD_PACKAGE_ID"/>
       </index>
diff -r 7b3a543035a2 -r ea70861b5474 src-db/database/sourcedata/AD_MESSAGE.xml
--- a/src-db/database/sourcedata/AD_MESSAGE.xml Thu Mar 06 13:22:06 2014 +0530
+++ b/src-db/database/sourcedata/AD_MESSAGE.xml Thu Mar 06 17:53:50 2014 +0530
@@ -18467,6 +18467,19 @@
 <!--4572743978F94C65969984E770B89172-->  
<ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
 <!--4572743978F94C65969984E770B89172--></AD_MESSAGE>
 
+<!--459ADF41A2F748B2AFC916760C046C28--><AD_MESSAGE>
+<!--459ADF41A2F748B2AFC916760C046C28-->  
<AD_MESSAGE_ID><![CDATA[459ADF41A2F748B2AFC916760C046C28]]></AD_MESSAGE_ID>
+<!--459ADF41A2F748B2AFC916760C046C28-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--459ADF41A2F748B2AFC916760C046C28-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--459ADF41A2F748B2AFC916760C046C28-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--459ADF41A2F748B2AFC916760C046C28-->  
<VALUE><![CDATA[DuplicateJavaClassName]]></VALUE>
+<!--459ADF41A2F748B2AFC916760C046C28-->  <MSGTEXT><![CDATA[Data package, java 
class name combination must be unique.]]></MSGTEXT>
+<!--459ADF41A2F748B2AFC916760C046C28-->  <MSGTIP><![CDATA[Data package, java 
class name combination must be unique.]]></MSGTIP>
+<!--459ADF41A2F748B2AFC916760C046C28-->  <MSGTYPE><![CDATA[E]]></MSGTYPE>
+<!--459ADF41A2F748B2AFC916760C046C28-->  
<AD_MODULE_ID><![CDATA[0]]></AD_MODULE_ID>
+<!--459ADF41A2F748B2AFC916760C046C28-->  
<ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--459ADF41A2F748B2AFC916760C046C28--></AD_MESSAGE>
+
 <!--45FB8C27317D441CAFD96F2EE0005EA1--><AD_MESSAGE>
 <!--45FB8C27317D441CAFD96F2EE0005EA1-->  
<AD_MESSAGE_ID><![CDATA[45FB8C27317D441CAFD96F2EE0005EA1]]></AD_MESSAGE_ID>
 <!--45FB8C27317D441CAFD96F2EE0005EA1-->  
<AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff -r 7b3a543035a2 -r ea70861b5474 
src/org/openbravo/event/ADTableEventHandler.java
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/openbravo/event/ADTableEventHandler.java  Thu Mar 06 17:53:50 
2014 +0530
@@ -0,0 +1,94 @@
+/*
+ *************************************************************************
+ * The contents of this file are subject to the Openbravo  Public  License
+ * Version  1.1  (the  "License"),  being   the  Mozilla   Public  License
+ * Version 1.1  with a permitted attribution clause; you may not  use this
+ * file except in compliance with the License. You  may  obtain  a copy of
+ * the License at http://www.openbravo.com/legal/license.html 
+ * Software distributed under the License  is  distributed  on  an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific  language  governing  rights  and  limitations
+ * under the License. 
+ * The Original Code is Openbravo ERP. 
+ * The Initial Developer of the Original Code is Openbravo SLU 
+ * All portions are Copyright (C) 2014 Openbravo SLU 
+ * All Rights Reserved. 
+ * Contributor(s):  ______________________________________.
+ ************************************************************************
+ */
+package org.openbravo.event;
+
+import javax.enterprise.event.Observes;
+
+import org.apache.log4j.Logger;
+import org.hibernate.criterion.Restrictions;
+import org.openbravo.base.exception.OBException;
+import org.openbravo.base.model.Entity;
+import org.openbravo.base.model.ModelProvider;
+import org.openbravo.base.model.Property;
+import org.openbravo.client.application.ApplicationConstants;
+import org.openbravo.client.kernel.event.EntityNewEvent;
+import org.openbravo.client.kernel.event.EntityPersistenceEvent;
+import org.openbravo.client.kernel.event.EntityPersistenceEventObserver;
+import org.openbravo.client.kernel.event.EntityUpdateEvent;
+import org.openbravo.dal.core.OBContext;
+import org.openbravo.dal.service.OBCriteria;
+import org.openbravo.dal.service.OBDal;
+import org.openbravo.database.ConnectionProvider;
+import org.openbravo.erpCommon.utility.Utility;
+import org.openbravo.model.ad.datamodel.Table;
+import org.openbravo.service.db.DalConnectionProvider;
+
+/**
+ * Event Handler for AD_Table
+ * 
+ * @author shankar
+ * 
+ */
+
+public class ADTableEventHandler extends EntityPersistenceEventObserver {
+
+  private static Entity[] entities = { 
ModelProvider.getInstance().getEntity(Table.ENTITY_NAME) };
+  protected Logger logger = Logger.getLogger(this.getClass());
+
+  @Override
+  protected Entity[] getObservedEntities() {
+    return entities;
+  }
+
+  public void onUpdate(@Observes
+  EntityUpdateEvent event) {
+    if (!isValidEvent(event)) {
+      return;
+    }
+    checkClassNameForDuplicates(event);
+  }
+
+  public void onSave(@Observes
+  EntityNewEvent event) {
+    if (!isValidEvent(event)) {
+      return;
+    }
+    checkClassNameForDuplicates(event);
+  }
+
+  private void checkClassNameForDuplicates(EntityPersistenceEvent event) {
+    ConnectionProvider conn = new DalConnectionProvider(false);
+    String language = OBContext.getOBContext().getLanguage().getLanguage();
+    final Entity tableEntity = 
ModelProvider.getInstance().getEntity(Table.ENTITY_NAME);
+    final Property javaClassNameProperty = 
tableEntity.getProperty(Table.PROPERTY_JAVACLASSNAME);
+    Object javaClassName = event.getCurrentState(javaClassNameProperty);
+    final Property packageNameProperty = 
tableEntity.getProperty(Table.PROPERTY_DATAPACKAGE);
+    Object packageName = event.getCurrentState(packageNameProperty);
+    final Property dataOriginTypeProperty = 
tableEntity.getProperty(Table.PROPERTY_DATAORIGINTYPE);
+    Object dataOriginType = event.getCurrentState(dataOriginTypeProperty);
+    if (!ApplicationConstants.DATASOURCEBASEDTABLE.equals(dataOriginType) && 
javaClassName != null) {
+      OBCriteria<Table> tableCriteria = 
OBDal.getInstance().createCriteria(Table.class);
+      tableCriteria.add(Restrictions.eq(Table.PROPERTY_JAVACLASSNAME, 
javaClassName));
+      tableCriteria.add(Restrictions.eq(Table.PROPERTY_DATAPACKAGE, 
packageName));
+      if (tableCriteria.count() != 0) {
+        throw new OBException(Utility.messageBD(conn, 
"DuplicateJavaClassName", language));
+      }
+    }
+  }
+}

------------------------------------------------------------------------------
Subversion Kills Productivity. Get off Subversion & Make the Move to Perforce.
With Perforce, you get hassle-free workflows. Merge that actually works. 
Faster operations. Version large binaries.  Built-in WAN optimization and the
freedom to use Git, Perforce or both. Make the move to Perforce.
http://pubads.g.doubleclick.net/gampad/clk?id=122218951&iu=/4140/ostg.clktrk
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits

Reply via email to