3 import java.util.Arrays;
6 import javax.servlet.http.HttpServletRequest;
7 import javax.servlet.http.HttpServletResponse;
9 import jalview.api.AlignViewportI;
10 import jalview.api.AlignmentViewPanel;
11 import jalview.datamodel.AlignmentI;
12 import jalview.datamodel.SequenceGroup;
13 import jalview.datamodel.SequenceI;
14 import jalview.gui.AlignFrame;
16 public class SelectSequencesEndpoint extends AbstractEndpoint
18 public SelectSequencesEndpoint(API api)
20 super(api, path, name, parameters, description);
23 protected static final String path = "selectsequences";
25 private static final String name = "Select sequence(s) positions";
27 private static final String parameters = "<sequence names>/<range>";
29 private static final String description = "Select the specified sequence(s) with the specified range";
31 public void processEndpoint(HttpServletRequest request,
32 HttpServletResponse response)
34 if (!checkParameters(request, response, 2))
38 String[] parameters = getEndpointPathParameters(request);
40 String rangesString = parameters[1];
41 int[][] ranges = parseIntRanges(rangesString);
42 if (ranges == null || ranges.length < 2 || ranges[0].length < 1)
44 returnError(request, response,
45 "couldn't parse range '" + rangesString + "'");
48 if (ranges[0].length > 1)
50 returnError(request, response,
51 "only provide 1 range '" + rangesString + "'");
54 int start = ranges[0][0];
55 int end = ranges[1][0];
57 String sequenceNamesString = parameters[0];
58 List<String> sequenceNames = Arrays
59 .asList(sequenceNamesString.split(","));
61 AlignFrame[] alignFrames = getAlignFrames(request, true);
62 if (alignFrames == null)
64 returnError(request, response, "could not find results");
67 for (int i = 0; i < alignFrames.length; i++)
69 AlignFrame af = alignFrames[i];
70 List<AlignmentViewPanel> aps = (List<AlignmentViewPanel>) af
72 for (AlignmentViewPanel ap : aps)
74 AlignViewportI avp = ap.getAlignViewport();
75 AlignmentI al = ap.getAlignment();
76 List<SequenceI> seqs = (List<SequenceI>) al.getSequences();
77 SequenceGroup stretchGroup = new SequenceGroup();
78 for (SequenceI seq : seqs)
80 if (sequenceNames.contains(seq.getName())
81 || (sequenceNamesString.equals("*")
82 && alignFrames.length == 1))
84 stretchGroup.addSequence(seq, false);
87 if (start == -1 && end == -1) // "*" as range
89 stretchGroup.setStartRes(al.getStartRes());
90 stretchGroup.setEndRes(al.getEndRes());
94 stretchGroup.setStartRes(start);
95 stretchGroup.setEndRes(end);
97 avp.setSelectionGroup(stretchGroup);
98 ap.paintAlignment(false, false);