diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/GerirMedidasRelatorioPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/GerirMedidasRelatorioPanel.java index ab6f473b..1d3d6b85 100644 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/GerirMedidasRelatorioPanel.java +++ b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/GerirMedidasRelatorioPanel.java @@ -88,7 +88,7 @@ public class GerirMedidasRelatorioPanel extends JPanel buttonAdicionar.setEnabled( false ); buttonRemover.setEnabled( false ); tree.setRootVisible( false ); - tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGLE_TREE_SELECTION ); + tree.getSelectionModel().setSelectionMode( TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION ); tree.setCellRenderer( new DefaultTreeCellRenderer() { @@ -337,26 +337,47 @@ public class GerirMedidasRelatorioPanel extends JPanel private void rem() { + for( TreePath path : tree.getSelectionPaths() ) + { + if( !rem(path) ) + { + break; + } + } + refresh(); + setEnabled(); + } + + + private String shortenString( String string ) + { + return string == null ? null : (string.length() <= 40 ? string : (string.substring(0,40) + "...")); + } + + + private boolean rem(TreePath path) + { + boolean outcome = false; try { - TreePath path = tree.getSelectionPath(); if( path != null ) { Object selection = path.getLastPathComponent(); if( selection instanceof MedidaRelatorioNode ) { - if( confirm("Tem a certeza que deseja remover o requisito?") ) + HsRelatorioPostoMedida rel = selection == null ? null : (HsRelatorioPostoMedida) ((MedidaRelatorioNode) selection).getUserObject(); + if( confirm("Tem a certeza que deseja remover o requisito '" + shortenString( rel.getToHsRelatorioMedida().toString() ) + "'?") ) { - HsRelatorioPostoMedida rel = selection == null ? null : (HsRelatorioPostoMedida) ((MedidaRelatorioNode) selection).getUserObject(); rel.getToHsRelatorioMedida().setDeletedDate( new Date() ); rel.delete(); + outcome = true; } } else if( selection instanceof RiscoRelatorioNode ) { - if( confirm("Tem a certeza que deseja remover o risco?") ) + HsRelatorioPostoRisco rel = (HsRelatorioPostoRisco) ((RiscoRelatorioNode)selection).getUserObject(); + if( confirm("Tem a certeza que deseja remover o risco '" + shortenString( rel.getToHsRelatorioRisco().toString() ) + "'?") ) { - HsRelatorioPostoRisco rel = (HsRelatorioPostoRisco) ((RiscoRelatorioNode)selection).getUserObject(); for( HsRelatorioMedida medida : rel.getToHsRelatorioRisco().getHsRelatorioMedidaArray() ) { while( true ) @@ -375,16 +396,16 @@ public class GerirMedidasRelatorioPanel extends JPanel medida.setDeletedDate( new Date() ); } rel.getToHsRelatorioRisco().setDeletedDate( new Date() ); + outcome = true; } } } - refresh(); - setEnabled(); } catch( Exception e ) { LeafDialog.error( e ); } + return outcome; } private void setEnabled() diff --git a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/PlanoActuacaoPanel.java b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/PlanoActuacaoPanel.java index f3562d0e..9261ca76 100644 --- a/trunk/SIPRPSoft/src/siprp/higiene/relatorio/PlanoActuacaoPanel.java +++ b/trunk/SIPRPSoft/src/siprp/higiene/relatorio/PlanoActuacaoPanel.java @@ -11,6 +11,8 @@ import java.beans.PropertyChangeListener; import javax.swing.BorderFactory; import javax.swing.JPanel; +import leaf.data.Pair; + import siprp.database.cayenne.objects.HsRelatorio; import siprp.database.cayenne.objects.HsRelatorioArea; import siprp.database.cayenne.objects.HsRelatorioPosto; diff --git a/trunk/common/src/leaf/ui/LeafTreeModel.java b/trunk/common/src/leaf/ui/LeafTreeModel.java new file mode 100644 index 00000000..86c415d6 --- /dev/null +++ b/trunk/common/src/leaf/ui/LeafTreeModel.java @@ -0,0 +1,16 @@ +package leaf.ui; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeNode; + +public class LeafTreeModel extends DefaultTreeModel +{ + + public LeafTreeModel(TreeNode root) + { + super(root); + } + + private static final long serialVersionUID = 1L; + +} diff --git a/trunk/common/src/siprp/database/cayenne/objects/BaseObject.java b/trunk/common/src/siprp/database/cayenne/objects/BaseObject.java index 889ccea4..4c6848fd 100644 --- a/trunk/common/src/siprp/database/cayenne/objects/BaseObject.java +++ b/trunk/common/src/siprp/database/cayenne/objects/BaseObject.java @@ -1,9 +1,16 @@ package siprp.database.cayenne.objects; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.text.DateFormat; +import java.util.LinkedList; +import java.util.List; import java.util.Locale; +import java.util.Map; import org.apache.cayenne.CayenneDataObject; +import org.apache.cayenne.ObjectId; import org.apache.cayenne.PersistenceState; import siprp.database.cayenne.providers.MainDAO; @@ -107,4 +114,87 @@ public class BaseObject extends CayenneDataObject implements Comparable ListgetNtoN( String relation, String toGet ) + { + List result = new LinkedList(); + for( BaseObject o : (List) super.readProperty(relation) ) + { + OBJ_CLASS toGetObj = (OBJ_CLASS) o.readProperty( toGet ); + if( null == toGetObj.readProperty( "deleted_date" ) ) + { + result.add(toGetObj); + } + } + return result; + } + + @Override + public Object readProperty(String propertyName) { + return (propertyName != null && propertyName.endsWith("Array") ) ? getReferringObjects(propertyName) : super.readProperty(propertyName); + } + + private boolean isRelational( OBJ_CLASS object ) + { + boolean result = false; + ObjectId id = object.getObjectId(); + if( id != null && !id.isTemporary() ) + { + Map ids = id.getIdSnapshot(); + if( ids != null && ids.size() == 2 ) + { + result = true; + } + } + return result; + } + + private boolean isRelDeleted( OBJ_CLASS object ) + { + boolean result = false; + if( object != null ) + { + for( Method method : object.getClass().getMethods() ) + { + if( method.getName().startsWith("getTo") ) + { + try + { + Object returned = method.invoke(object); + if( returned != null && (returned instanceof BaseObject ) ) + { + result |= null != ((BaseObject)returned).readProperty("deletedDate"); + } + } + catch (Exception e) + { + e.printStackTrace(); + } + } + } + } + return result; + } + + @SuppressWarnings("unchecked") + private List getReferringObjects( String arrayProperty ) + { + List result = new LinkedList(); + Boolean isRel = null; + for( OBJ_CLASS o : (List) super.readProperty(arrayProperty) ) + { + if( isRel == null ) + { + isRel = isRelational( o ); + } + if( null == o.readProperty( "deletedDate" ) ) + { + if( !isRel || !isRelDeleted( o ) ) + { + result.add(o); + } + } + } + return result; + } + } diff --git a/trunk/common/src/siprp/database/cayenne/objects/HsRelatorioPostoRisco.java b/trunk/common/src/siprp/database/cayenne/objects/HsRelatorioPostoRisco.java index 526b2db7..a4c4d268 100644 --- a/trunk/common/src/siprp/database/cayenne/objects/HsRelatorioPostoRisco.java +++ b/trunk/common/src/siprp/database/cayenne/objects/HsRelatorioPostoRisco.java @@ -11,4 +11,5 @@ public class HsRelatorioPostoRisco extends _HsRelatorioPostoRisco { { return getToHsRelatorioRisco().getDescription(); } + }