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