import jalview.datamodel.SequenceFeature;
import jalview.io.gff.SequenceOntologyFactory;
import jalview.io.gff.SequenceOntologyI;
+import jalview.util.Platform;
import java.util.ArrayList;
import java.util.Arrays;
* map from feature type to structured store of features for that type
* null types are permitted (but not a good idea!)
*/
- private Map<String, FeatureStore> featureStore;
+ private Map<String, FeatureStoreI> featureStore;
+
+ private static boolean useIntervalStore = !Platform.isJS();
/**
* Constructor
* ? wrap as a synchronized map for add and delete operations
*/
// featureStore = Collections
- // .synchronizedSortedMap(new TreeMap<String, FeatureStore>());
+ // .synchronizedSortedMap(new TreeMap<String, FeatureStoreI>());
featureStore = new TreeMap<>();
}
if (featureStore.get(type) == null)
{
- featureStore.put(type, new FeatureStore());
+ featureStore.put(type, newFeatureStore());
}
return featureStore.get(type).addFeature(sf);
}
+ private FeatureStoreI newFeatureStore()
+ {
+ // TODO Auto-generated method stub
+ return (useIntervalStore ? new FeatureStoreImpl() : new FeatureStoreJS());
+ }
+
/**
* {@inheritDoc}
*/
String... type)
{
List<SequenceFeature> result = new ArrayList<>();
- for (FeatureStore featureSet : varargToTypes(type))
+ for (FeatureStoreI featureSet : varargToTypes(type))
{
- result.addAll(featureSet.findOverlappingFeatures(from, to));
+ result.addAll(featureSet.findOverlappingFeatures(from, to, null));
}
return result;
}
{
int result = 0;
- for (FeatureStore featureSet : varargToTypes(type))
+ for (FeatureStoreI featureSet : varargToTypes(type))
{
result += featureSet.getFeatureCount(positional);
}
{
int result = 0;
- for (FeatureStore featureSet : varargToTypes(type))
+ for (FeatureStoreI featureSet : varargToTypes(type))
{
result += featureSet.getTotalFeatureLength();
}
{
List<SequenceFeature> result = new ArrayList<>();
- for (FeatureStore featureSet : varargToTypes(type))
+ for (FeatureStoreI featureSet : varargToTypes(type))
{
- result.addAll(featureSet.getPositionalFeatures());
+ featureSet.getPositionalFeatures(result);
}
return result;
}
* @param type
* @return
*/
- protected Iterable<FeatureStore> varargToTypes(String... type)
+ protected Iterable<FeatureStoreI> varargToTypes(String... type)
{
if (type == null || type.length == 0)
{
}
- List<FeatureStore> types = new ArrayList<>();
+ List<FeatureStoreI> types = new ArrayList<>();
List<String> args = Arrays.asList(type);
- for (Entry<String, FeatureStore> featureType : featureStore.entrySet())
+ for (Entry<String, FeatureStoreI> featureType : featureStore.entrySet())
{
if (args.contains(featureType.getKey()))
{
{
List<SequenceFeature> result = new ArrayList<>();
- for (FeatureStore featureSet : varargToTypes(type))
+ for (FeatureStoreI featureSet : varargToTypes(type))
{
- result.addAll(featureSet.getContactFeatures());
+ featureSet.getContactFeatures(result);
}
return result;
}
{
List<SequenceFeature> result = new ArrayList<>();
- for (FeatureStore featureSet : varargToTypes(type))
+ for (FeatureStoreI featureSet : varargToTypes(type))
{
- result.addAll(featureSet.getNonPositionalFeatures());
+ featureSet.getNonPositionalFeatures(result);
}
return result;
}
@Override
public boolean delete(SequenceFeature sf)
{
- for (FeatureStore featureSet : featureStore.values())
+ for (FeatureStoreI featureSet : featureStore.values())
{
if (featureSet.delete(sf))
{
@Override
public boolean hasFeatures()
{
- for (FeatureStore featureSet : featureStore.values())
+ for (FeatureStoreI featureSet : featureStore.values())
{
if (!featureSet.isEmpty())
{
{
Set<String> groups = new HashSet<>();
- for (FeatureStore featureSet : varargToTypes(type))
+ for (FeatureStoreI featureSet : varargToTypes(type))
{
groups.addAll(featureSet.getFeatureGroups(positionalFeatures));
}
{
Set<String> result = new HashSet<>();
- for (Entry<String, FeatureStore> featureType : featureStore.entrySet())
+ for (Entry<String, FeatureStoreI> featureType : featureStore.entrySet())
{
Set<String> featureGroups = featureType.getValue().getFeatureGroups(
positionalFeatures);
public Set<String> getFeatureTypes(String... soTerm)
{
Set<String> types = new HashSet<>();
- for (Entry<String, FeatureStore> entry : featureStore.entrySet())
+ for (Entry<String, FeatureStoreI> entry : featureStore.entrySet())
{
String type = entry.getKey();
if (!entry.getValue().isEmpty() && isOntologyTerm(type, soTerm))
String group, String... type)
{
List<SequenceFeature> result = new ArrayList<>();
- for (FeatureStore featureSet : varargToTypes(type))
+ for (FeatureStoreI featureSet : varargToTypes(type))
{
if (featureSet.getFeatureGroups(positional).contains(group))
{
public boolean shiftFeatures(int fromPosition, int shiftBy)
{
boolean modified = false;
- for (FeatureStore fs : featureStore.values())
+ for (FeatureStoreI fs : featureStore.values())
{
modified |= fs.shiftFeatures(fromPosition, shiftBy);
}
public List<SequenceFeature> findFeatures(int pos, String type,
List<SequenceFeature> list)
{
- FeatureStore fs = featureStore.get(type);
- boolean useIntervalStore = /**
- * @j2sNative false &&
- */
- true;
- return (useIntervalStore ? fs.findOverlappingFeatures(pos, pos)
- : fs.findOverlappingFeatures(pos, list));
+ FeatureStoreI fs = featureStore.get(type);
+ return fs.findOverlappingFeatures(pos, pos, list);
}
// Chrome; developer console closed