/* * eXist Open Source Native XML Database * Copyright (C) 2009 The eXist Project * http://exist-db.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id: BreakpointImpl.java 11737 2010-05-02 21:25:21Z ixitar $ */ package org.exist.debugger.model; import java.io.IOException; import org.exist.debugger.DebuggerImpl; import org.exist.debugger.DebuggingSource; /** * @author <a href="mailto:shabanovd@gmail.com">Dmitriy Shabanov</a> * */ public class BreakpointImpl implements Breakpoint { /** * breakpoint type [required] */ private String type; /** * breakpoint state [optional, defaults to "enabled"] */ private boolean state = true; /** * the filename to which the breakpoint belongs [optional] */ private String fileName; /** * the line number (lineno) of the breakpoint [optional] */ private Integer lineNo; /** * function name [required for call or return breakpoint types] */ private String function; /** * EXCEPTION exception name [required for exception breakpoint types] */ private String exception; /** * hit value (hit_value) used with the hit condition to determine if should break; * a value of zero indicates hit count processing is disabled for this breakpoint * [optional, defaults to zero (i.e. disabled)] */ private int hitValue = 0; /** * hit condition string (hit_condition); * see HIT_CONDITION hit_condition documentation above; * BTW 'o' stands for 'operator' [optional, defaults to '>='] */ private String hitCondition = ">="; /** * Boolean value indicating if this breakpoint is temporary. [optional, defaults to false] */ private boolean temporary = false; /** * code expression, in the language of the debugger engine. The breakpoint should activate when the evaluated code evaluates to true. [required for conditional breakpoint types] */ private String expression; private int hitCount = 0; public BreakpointImpl() { type = Breakpoint.TYPE_LINE; //default value } public String getException() { return exception; } public String getFilename() { return fileName; } public String getFunction() { return function; } public String getHitCondition() { return hitCondition; } public int getHitCount() { return hitCount; } public int getHitValue() { return 0; } public Integer getLineno() { return lineNo; } public boolean getState() { return state; } public boolean getTemporary() { return temporary; } public void setException(String exception) { this.exception = exception; } //protected? -shabanovd public void setFilename(String filename) { this.fileName = filename; } public void setFunction(String function) { this.function = function; } public void setHitCondition(String condition) { this.hitCondition = condition; } public void setHitCount(int count) { this.hitCount = count; } public void setHitValue(int value) { this.hitValue = value; } public void setLineno(Integer lineno) { this.lineNo = lineno; } public void setState(boolean state) { this.state = state; } public void setTemporary(boolean temporary) { this.temporary = temporary; } private int id = -1; public int getId() { return id; } public void setId(int breakpointNo) { this.id = breakpointNo; } public String getType() { return type; } public void setType(String type) { this.type = type; } public String toXMLString() { return "<breakpoint " + "id=\""+String.valueOf(id)+"\" " + "type=\""+type+"\" "+ "state=\""+state+"\" "+ "filename=\""+fileName+"\" " + "lineno=\""+String.valueOf(lineNo)+"\" " + "function=\""+function+"\" " + "exception=\""+exception+"\" " + "hit_value=\""+String.valueOf(hitValue)+"\" " + "hit_condition=\""+hitCondition+"\" " + "hit_count=\""+String.valueOf(hitCount)+"\" >"+ "<expression>"+expression+"</expression>"+ "</breakpoint>"; } private DebuggingSource debuggingSource; public void setDebuggingSource(DebuggingSource debuggingSource) { this.debuggingSource = debuggingSource; } private DebuggerImpl getDebugger() { return (DebuggerImpl)debuggingSource.getDebugger(); } public boolean sync() throws IOException { if (getId() == -1) { return getDebugger().setBreakpoint(this); } else if (getId() > 0) { return getDebugger().updateBreakpoint(this); } //TODO: call remove breakpoint ??? return false; } public boolean remove() throws IOException { return getDebugger().removeBreakpoint(this); } }