for (int pdbfnum = 0; pdbfnum < files.length; pdbfnum++)
{
StructureMapping[] mapping = ssm.getMapping(files[pdbfnum]);
- StringBuffer command = new StringBuffer();
+ StringBuilder command = new StringBuilder();
StructureMappingcommandSet smc;
ArrayList<String> str = new ArrayList<String>();
continue;
}
- int lastPos = -1;
for (int s = 0; s < sequence[pdbfnum].length; s++)
{
for (int sp, m = 0; m < mapping.length; m++)
if (mapping[m].getSequence() == sequence[pdbfnum][s]
&& (sp = al.findIndex(sequence[pdbfnum][s])) > -1)
{
+ int lastPos = StructureMapping.UNASSIGNED_VALUE;
SequenceI asp = al.getSequenceAt(sp);
for (int r = 0; r < asp.getLength(); r++)
{
}
int pos = mapping[m].getPDBResNum(asp.findPosition(r));
- if (pos < 1 || pos == lastPos)
+ if (pos == lastPos)
{
continue;
}
+ if (pos == StructureMapping.UNASSIGNED_VALUE)
+ {
+ // terminate current colour op
+ if (command.length() > 0
+ && command.charAt(command.length() - 1) != ';')
+ {
+ command.append(";");
+ }
+ // reset lastPos
+ lastPos = StructureMapping.UNASSIGNED_VALUE;
+ continue;
+ }
lastPos = pos;
col = Color.GRAY;
}
- String newSelcom = (mapping[m].getChain() != " " ? ":"
- + mapping[m].getChain() : "")
- + "/"
- + (pdbfnum + 1)
- + ".1"
- + ";color["
- + col.getRed()
- + ","
- + col.getGreen()
- + ","
+ // todo JAL-3152 handle 'no chain' case without errors
+ boolean hasChain = true || mapping[m].getChain() != " ";
+ String chainSpec = hasChain
+ ? ":" + mapping[m].getChain()
+ : "";
+ String newSelcom = chainSpec + "/" + (pdbfnum + 1) + ".1" + ";color["
+ + col.getRed() + "," + col.getGreen() + ","
+ col.getBlue() + "]";
- if (command.length() > newSelcom.length()
- && command.substring(
- command.length() - newSelcom.length())
- .equals(newSelcom))
+ if (command.length() > newSelcom.length() && command
+ .substring(command.length() - newSelcom.length())
+ .equals(newSelcom))
{
command = JmolCommands.condenseCommand(command, pos);
continue;
// TODO: deal with case when buffer is too large for Jmol to parse
// - execute command and flush
- command.append(";");
+ if (command.length() > 0
+ && command.charAt(command.length() - 1) != ';')
+ {
+ command.append(";");
+ }
+
if (command.length() > 51200)
{
// add another chunk
return cset.toArray(new StructureMappingcommandSet[cset.size()]);
}
- public static StringBuffer condenseCommand(StringBuffer command, int pos)
+ public static StringBuilder condenseCommand(StringBuilder command, int pos)
{
// work back to last 'select'
;
} while ((q = command.indexOf("select", p)) == -1 && p > 0);
- StringBuffer sb = new StringBuffer(command.substring(0, q + 7));
+ StringBuilder sb = new StringBuilder(command.substring(0, q + 7));
command = command.delete(0, q + 7);