001    package nl.cwi.sen1.tide.adapters.gdb;
002    
003    import java.io.File;
004    import java.util.regex.Matcher;
005    import java.util.regex.Pattern;
006    
007    public class SetBreakpointCmd
008      extends Command
009    {
010            private static Pattern breakPattern;
011    
012            private int breakpoint;
013            private String method;
014            private String file;
015            private int    linenr;
016    
017            static {
018                    breakPattern = Pattern.compile("Breakpoint ([0-9]+) at 0x[0-9a-f]+: " + "file ([a-zA-Z\\.]+), line ([0-9]+)\\.");
019            }
020            
021            public SetBreakpointCmd(GdbAdapter adapter, String method)
022            {
023                    super(adapter);
024                    this.method = method;
025            }
026    
027            public SetBreakpointCmd(GdbAdapter adapter, String file, int line)
028            {
029                    super(adapter);
030                    this.file   = file;
031                    this.linenr = line;
032            }
033    
034            public String command()
035            {
036                    if(method != null)
037                            return "break " + method + "\n";
038            File f = new File(file);
039            return "break " + f.getName() + ":" + linenr + "\n";
040            }
041    
042            public boolean response(String line)
043            {
044                    Matcher matcher = breakPattern.matcher(line);
045                    
046                    if(matcher.matches()) {
047                            breakpoint = Integer.parseInt(matcher.group(1));
048                            file       = matcher.group(2);
049                            linenr     = Integer.parseInt(matcher.group(3));
050                            return true;
051                    }
052                    
053                    debugMsg("line '" + line + "' does not match with break pattern");
054                            return false;
055            }
056    
057            public int getBreakpoint()
058            {
059                    return breakpoint;
060            }
061    
062            public String getFileName()
063            {
064                    return file;
065            }
066    
067            public int getLineNr()
068            {
069                    return linenr;
070            }
071    }