*/
package jalview.ws;
+import java.util.Locale;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
import jalview.analysis.AlignSeq;
+import jalview.api.FeatureSettingsModelI;
import jalview.bin.Cache;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.DBRefEntry;
import jalview.util.DBRefUtils;
import jalview.util.MessageManager;
import jalview.ws.seqfetcher.DbSourceProxy;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.StringTokenizer;
-import java.util.Vector;
-
import uk.ac.ebi.picr.model.UPEntry;
import uk.ac.ebi.www.picr.AccessionMappingService.AccessionMapperServiceLocator;
CutAndPasteTransfer output = new CutAndPasteTransfer();
- boolean running = false;
-
/**
* picr client instance
*/
*/
public void fetchDBRefs(boolean waitTillFinished)
{
- // TODO can we not simply write
- // if (waitTillFinished) { run(); } else { new Thread(this).start(); }
-
- Thread thread = new Thread(this);
- thread.start();
- running = true;
-
if (waitTillFinished)
{
- while (running)
- {
- try
- {
- Thread.sleep(500);
- } catch (Exception ex)
- {
- }
- }
+ run();
+ }
+ else
+ {
+ new Thread(this).start();
}
}
*/
void addSeqId(SequenceI seq, String key)
{
- key = key.toUpperCase();
+ key = key.toUpperCase(Locale.ROOT);
Vector<SequenceI> seqs;
if (seqRefs.containsKey(key))
throw new Error(MessageManager
.getString("error.implementation_error_must_init_dbsources"));
}
- running = true;
long startTime = System.currentTimeMillis();
if (progressWindow != null)
{
Arrays.asList(dataset));
List<String> warningMessages = new ArrayList<>();
+ // clear any old feature display settings recorded from past sessions
+ featureDisplaySettings = null;
+
int db = 0;
while (sdataset.size() > 0 && db < dbSources.length)
{
AlignmentI retrieved = null;
try
{
- if (Cache.log.isDebugEnabled())
+ if (Cache.isDebugEnabled())
{
- Cache.log.debug("Querying " + dbsource.getDbName()
+ Cache.debug("Querying " + dbsource.getDbName()
+ " with : '" + queryString.toString() + "'");
}
retrieved = dbsource.getSequenceRecords(queryString.toString());
}
if (retrieved != null)
{
- transferReferences(sdataset, dbsource.getDbSource(), retrieved,
+ transferReferences(sdataset, dbsource, retrieved,
trimDsSeqs, warningMessages);
}
}
DBRefEntry upref = uprefs.get(j);
addSeqId(sequence, upref.getAccessionId());
queries.addElement(
- upref.getAccessionId().toUpperCase());
+ upref.getAccessionId().toUpperCase(Locale.ROOT));
}
}
else
{
+ Pattern possibleIds = Pattern.compile("[A-Za-z0-9_]+");
// generate queries from sequence ID string
- StringTokenizer st = new StringTokenizer(sequence.getName(),
- "|");
- while (st.hasMoreTokens())
+ Matcher tokens = possibleIds.matcher(sequence.getName());
+ int p=0;
+ while (tokens.find(p))
{
- String token = st.nextToken();
+ String token = tokens.group();
+ p = tokens.end();
UPEntry[] presp = null;
if (picrClient != null)
{
"Validated ID against PICR... (for what its worth):"
+ token);
addSeqId(sequence, token);
- queries.addElement(token.toUpperCase());
+ queries.addElement(token.toUpperCase(Locale.ROOT));
}
else
{
// System.out.println("Not querying source with
// token="+token+"\n");
addSeqId(sequence, token);
- queries.addElement(token.toUpperCase());
+ queries.addElement(token.toUpperCase(Locale.ROOT));
}
}
}
{
listener.finished();
}
- running = false;
}
/**
* @param warningMessages
* a list of messages to add to
*/
- boolean transferReferences(Vector<SequenceI> sdataset, String dbSource,
+ boolean transferReferences(Vector<SequenceI> sdataset,
+ DbSourceProxy dbSourceProxy,
AlignmentI retrievedAl, boolean trimDatasetSeqs,
List<String> warningMessages)
{
return false;
}
+ String dbSource = dbSourceProxy.getDbName();
boolean modified = false;
SequenceI[] retrieved = recoverDbSequences(
retrievedAl.getSequencesArray());
DBRefEntry ref = entryRefs.get(j);
String accessionId = ref.getAccessionId();
// match up on accessionId
- if (seqRefs.containsKey(accessionId.toUpperCase()))
+ if (seqRefs.containsKey(accessionId.toUpperCase(Locale.ROOT)))
{
Vector<SequenceI> seqs = seqRefs.get(accessionId);
for (int jj = 0; jj < seqs.size(); jj++)
* seqs.elementAt(jj); if (!sequenceMatches.contains(sequence)) {
* sequenceMatches.addElement(sequence); } } } }
*/
+ if (sequenceMatches.size() > 0)
+ {
+ addFeatureSettings(dbSourceProxy);
+ }
// sequenceMatches now contains the set of all sequences associated with
// the returned db record
final String retrievedSeqString = retrievedSeq.getSequenceAsString();
- String entrySeq = retrievedSeqString.toUpperCase();
+ String entrySeq = retrievedSeqString.toUpperCase(Locale.ROOT);
for (int m = 0; m < sequenceMatches.size(); m++)
{
sequence = sequenceMatches.elementAt(m);
boolean remoteEnclosesLocal = false;
String nonGapped = AlignSeq
.extractGaps("-. ", sequence.getSequenceAsString())
- .toUpperCase();
+ .toUpperCase(Locale.ROOT);
int absStart = entrySeq.indexOf(nonGapped);
if (absStart == -1)
{
String ngAlsq = AlignSeq
.extractGaps("-. ",
alseqs[alsq].getSequenceAsString())
- .toUpperCase();
+ .toUpperCase(Locale.ROOT);
int oldstrt = alseqs[alsq].getStart();
alseqs[alsq].setStart(sequence.getSequenceAsString()
- .toUpperCase().indexOf(ngAlsq) + sequence.getStart());
+ .toUpperCase(Locale.ROOT).indexOf(ngAlsq) + sequence.getStart());
if (oldstrt != alseqs[alsq].getStart())
{
alseqs[alsq].setEnd(
return modified;
}
+ Map<String, FeatureSettingsModelI> featureDisplaySettings = null;
+
+ private void addFeatureSettings(DbSourceProxy dbSourceProxy)
+ {
+ FeatureSettingsModelI fsettings = dbSourceProxy
+ .getFeatureColourScheme();
+ if (fsettings != null)
+ {
+ if (featureDisplaySettings == null)
+ {
+ featureDisplaySettings = new HashMap<>();
+ }
+ featureDisplaySettings.put(dbSourceProxy.getDbName(), fsettings);
+ }
+ }
+
+ /**
+ *
+ * @return any feature settings associated with sources that have provided sequences
+ */
+ public List<FeatureSettingsModelI>getFeatureSettingsModels()
+ {
+ return featureDisplaySettings == null
+ ? Arrays.asList(new FeatureSettingsModelI[0])
+ : Arrays.asList(featureDisplaySettings.values()
+ .toArray(new FeatureSettingsModelI[1]));
+ }
/**
* Adds the message to the list unless it already contains it
*