Salome HOME
Vasily has fixed the following bug :
[tools/siman.git] / Workspace / Siman / src / org / splat / simer / VersionDocumentAction.java
index 5c41b269c4e91e2b1ad41ddc5657573e76a8f276..90733644a26a13fa2c333d2f464ab4891df951f6 100644 (file)
@@ -5,6 +5,7 @@ import java.io.FileNotFoundException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.Iterator;
 import java.util.List;
 import java.util.ResourceBundle;
 
@@ -64,8 +65,9 @@ public class VersionDocumentAction extends BaseUploadDocumentAction {
                File upfile = commonInitialize(Constants.TRUE);
 
                _mystudy = getOpenStudy();
+               _mystudy.updateCurrentStep();
                _defuses = new ArrayList<Document>();
-
+               
                Publication tag = _mystudy.getSelectedStep().getDocument(
                                Integer.valueOf(_index));
                Document doc = tag.value();
@@ -81,14 +83,25 @@ public class VersionDocumentAction extends BaseUploadDocumentAction {
                        // Add additional documents used by the current version
                        for (Relation usesRel : doc.getRelations(UsesRelation.class)) {
                                Document used = (Document) usesRel.getTo();
-                               if (!_defuses.contains(used)) {
-                                       _defuses.add(used);
+                               Document lastVersion = getPublicationService().getLastVersion(used, tag.getOwner());
+                               if (lastVersion != null && !_defuses.contains(lastVersion)) {
+                                       _defuses.add(lastVersion);
                                }
                        }
                        // Avoid recursive using of the document
                        if (_defuses.contains(doc)) {
                                _defuses.remove(doc);
                        }
+                       
+                       // Avoid using of documents dependent on the current version of the document being versioned
+                       // (This case is possible only if both documents belong to the step of the same Project Element)
+                       for(Iterator<Document> document = _defuses.iterator(); document.hasNext(); ) {
+                               Publication pub = tag.getOwner().getPublication(document.next());
+                               if(pub != null && pub.getRelations(UsesRelation.class).contains(tag)) {
+                                       document.remove();
+                               }
+                       }
+                       
                        // Setup dependencies
                        _usedby.addAll(tag.getRelations(UsedByRelation.class));