dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #17993
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 7400: Enabled update of expression (meta-data importer). Fixes to DefaultDeletionManager to make it mor...
------------------------------------------------------------
revno: 7400
committer: Morten Olav Hansen <mortenoh@xxxxxxxxx>
branch nick: dhis2
timestamp: Tue 2012-06-26 12:13:37 +0300
message:
Enabled update of expression (meta-data importer). Fixes to DefaultDeletionManager to make it more robust (also includes support for javaassist dynamic sub-classes).
modified:
dhis-2/dhis-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/importers/DefaultIdentifiableObjectImporter.java
dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/validation/ValidationRuleDeletionHandler.java
dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/deletion/DefaultDeletionManager.java
--
lp:dhis2
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk
Your team DHIS 2 developers is subscribed to branch lp:dhis2.
To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription
=== modified file 'dhis-2/dhis-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/importers/DefaultIdentifiableObjectImporter.java'
--- dhis-2/dhis-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/importers/DefaultIdentifiableObjectImporter.java 2012-06-26 07:03:53 +0000
+++ dhis-2/dhis-dxf2/src/main/java/org/hisp/dhis/dxf2/metadata/importers/DefaultIdentifiableObjectImporter.java 2012-06-26 09:13:37 +0000
@@ -138,8 +138,8 @@
deleteAttributeValues( object );
// deleteDataElementOperands( compulsoryDataElementOperands );
deleteDataElementOperands( object, "greyedFields" );
- // deleteExpression( object, "leftSide" );
- // deleteExpression( object, "rightSide" );
+ deleteExpression( object, "leftSide" );
+ deleteExpression( object, "rightSide" );
}
}
=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/validation/ValidationRuleDeletionHandler.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/validation/ValidationRuleDeletionHandler.java 2011-12-26 10:07:59 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/validation/ValidationRuleDeletionHandler.java 2012-06-26 09:13:37 +0000
@@ -47,7 +47,7 @@
{
this.validationRuleService = validationRuleService;
}
-
+
// -------------------------------------------------------------------------
// DeletionHandler implementation
// -------------------------------------------------------------------------
@@ -57,13 +57,16 @@
{
return ValidationRule.class.getSimpleName();
}
-
+
@Override
public void deleteExpression( Expression expression )
{
for ( ValidationRule rule : validationRuleService.getAllValidationRules() )
{
- if ( rule.getLeftSide().equals( expression ) || rule.getRightSide().equals( expression ) )
+ Expression leftSide = rule.getLeftSide();
+ Expression rightSide = rule.getRightSide();
+
+ if ( (leftSide != null && leftSide.equals( expression )) || (rightSide != null && rightSide.equals( expression )) )
{
validationRuleService.deleteValidationRule( rule );
}
=== modified file 'dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/deletion/DefaultDeletionManager.java'
--- dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/deletion/DefaultDeletionManager.java 2011-12-26 10:07:59 +0000
+++ dhis-2/dhis-support/dhis-support-system/src/main/java/org/hisp/dhis/system/deletion/DefaultDeletionManager.java 2012-06-26 09:13:37 +0000
@@ -27,16 +27,17 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+import javassist.util.proxy.ProxyObject;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.hisp.dhis.common.DeleteNotAllowedException;
+
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.hisp.dhis.common.DeleteNotAllowedException;
-
/**
* @author Lars Helge Overland
* @version $Id$
@@ -45,10 +46,10 @@
implements DeletionManager
{
private static final Log log = LogFactory.getLog( DefaultDeletionManager.class );
-
+
private static final String DELETE_METHOD_PREFIX = "delete";
private static final String ALLOW_METHOD_PREFIX = "allowDelete";
-
+
private List<DeletionHandler> handlers = new ArrayList<DeletionHandler>();
// -------------------------------------------------------------------------
@@ -59,15 +60,15 @@
{
this.handlers.add( handler );
}
-
+
public void addDeletionHandlers( Collection<DeletionHandler> deletionHandlers )
{
this.handlers.addAll( deletionHandlers );
}
-
+
public void execute( Object object )
{
- Class<?> clazz = object.getClass();
+ Class<?> clazz = getClazz( object );
String className = clazz.getSimpleName();
@@ -81,41 +82,41 @@
try
{
- Method allowMethod = DeletionHandler.class.getMethod( allowMethodName, new Class[] { clazz } );
+ Method allowMethod = DeletionHandler.class.getMethod( allowMethodName, new Class[] { clazz } );
for ( DeletionHandler handler : handlers )
- {
+ {
currentHandler = handler.getClass().getSimpleName();
Object allow = allowMethod.invoke( handler, object );
-
+
if ( allow != null )
{
String hint = String.valueOf( allow );
-
- String message = handler.getClassName() + ( hint.isEmpty() ? "" : ( " (" + hint + ")" ) );
-
+
+ String message = handler.getClassName() + (hint.isEmpty() ? "" : (" (" + hint + ")"));
+
throw new DeleteNotAllowedException( DeleteNotAllowedException.ERROR_ASSOCIATED_BY_OTHER_OBJECTS, message );
}
}
- }
- catch ( NoSuchMethodException ex )
+ } catch ( NoSuchMethodException e )
{
- log.error( "Method '" + allowMethodName + "' does not exist on class '" + clazz + "'", ex );
- }
- catch ( IllegalAccessException ex )
+ log.error( "Method '" + allowMethodName + "' does not exist on class '" + clazz + "'", e );
+ return;
+ } catch ( IllegalAccessException ex )
{
log.error( "Method '" + allowMethodName + "' could not be invoked on DeletionHandler '" + currentHandler + "'", ex );
- }
- catch ( InvocationTargetException ex )
+ return;
+ } catch ( InvocationTargetException ex )
{
log.error( "Method '" + allowMethodName + "' threw exception on DeletionHandler '" + currentHandler + "'", ex );
+ return;
}
// ---------------------------------------------------------------------
// Delete associated objects
// ---------------------------------------------------------------------
-
+
String deleteMethodName = DELETE_METHOD_PREFIX + className;
try
@@ -125,15 +126,25 @@
for ( DeletionHandler handler : handlers )
{
currentHandler = handler.getClass().getSimpleName();
-
+
deleteMethod.invoke( handler, object );
}
- }
- catch ( Exception ex )
+ } catch ( Exception ex )
{
log.error( "Failed to invoke method " + deleteMethodName + " on DeletionHandler '" + currentHandler + "'", ex );
- }
-
- log.info( "Deleted objects associatied with object of type " + className );
+ return;
+ }
+
+ log.info( "Deleted objects associated with object of type " + className );
+ }
+
+ private Class<?> getClazz( Object object )
+ {
+ if ( ProxyObject.class.isAssignableFrom( object.getClass() ) )
+ {
+ return object.getClass().getSuperclass();
+ }
+
+ return object.getClass();
}
}