]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.common/src/org/simantics/db/common/utils/VersionMap.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.db.common / src / org / simantics / db / common / utils / VersionMap.java
1 package org.simantics.db.common.utils;
2
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.List;
6
7 import org.simantics.db.ReadGraph;
8 import org.simantics.db.Resource;
9 import org.simantics.db.common.NamedResource;
10 import org.simantics.db.exception.DatabaseException;
11 import org.simantics.utils.datastructures.MapList;
12 import org.simantics.utils.strings.AlphanumComparator;
13
14 public class VersionMap extends MapList<String,NamedResource> {
15
16         public NamedResource getNewest(ReadGraph graph, String baseName) {
17                 List<NamedResource> versions = getValuesUnsafe(baseName);
18                 if(versions == null || versions.isEmpty()) return null;
19                 NamedResource result = versions.get(0);
20                 for(int i=1;i<versions.size();i++) {
21                         NamedResource version = versions.get(i);
22                         if(AlphanumComparator.COMPARATOR.compare(version.getName(), result) > 0) result = version;
23                 }
24                 return result;
25         }
26         
27         public Collection<NamedResource> getOlderOrEqualVersions(ReadGraph graph, Resource artifact) throws DatabaseException {
28                 String baseName = Versions.getBaseName(graph, artifact);
29                 String version = Versions.getVersion(graph, artifact);
30                 List<NamedResource> versions = getValuesUnsafe(baseName);
31                 if(versions == null || versions.isEmpty()) return null;
32                 ArrayList<NamedResource> result = new ArrayList<NamedResource>();
33                 for(NamedResource nr : versions) {
34                         if(AlphanumComparator.COMPARATOR.compare(nr.getName(), version) <= 0) result.add(nr);
35                 }
36                 return result;
37         }
38
39         public Collection<NamedResource> getNewerOrEqualVersions(ReadGraph graph, Resource artifact) throws DatabaseException {
40                 String baseName = Versions.getBaseName(graph, artifact);
41                 String version = Versions.getVersion(graph, artifact);
42                 List<NamedResource> versions = getValuesUnsafe(baseName);
43                 if(versions == null || versions.isEmpty()) return null;
44                 ArrayList<NamedResource> result = new ArrayList<NamedResource>();
45                 for(NamedResource nr : versions) {
46                         if(AlphanumComparator.COMPARATOR.compare(nr.getName(), version) >= 0) result.add(nr);
47                 }
48                 return result;
49         }
50         
51         public boolean contains(String baseName, String version) {
52                 List<NamedResource> versions = getValuesUnsafe(baseName);
53                 if(versions == null || versions.isEmpty()) return false;
54                 for(NamedResource nr : versions) {
55                         if(nr.getName().equals(version)) return true;
56                 }
57                 return false;
58         }
59         
60 }