package org.eclipse.dltk.rhino.dbgp; import java.io.File; import java.net.URI; import java.net.URISyntaxException; import java.util.HashMap; public class BreakPoint { static int last_id = 0; protected final String file; protected int line; protected final int id; protected boolean enabled = true; protected boolean isTemporary = false; protected int hitValue = 0; protected int hitCondition = 0; protected int currentHitCount = 0; protected String expression; protected boolean isExitBreakpoint; protected String method; protected boolean isReturn; protected boolean isWatch; protected boolean isCall; protected boolean isModification; protected boolean isAccess; private String type; protected BreakPoint(HashMap options) { String object = (String) options.get("-t"); this.type = object; if (object.equals("call") || object.equals("return")) { method = (String) options.get("-m"); this.isReturn = object.equals("return"); this.isCall = object.equals("call"); } if (object.equals("watch")) { this.isWatch = true; } String uri = (String) options.get("-f"); if (uri != null) { try { this.file = new File(new URI(uri)).getAbsolutePath(); } catch (URISyntaxException e) { throw new RuntimeException(); } } else { this.file = ""; } String line = (String) options.get("-n"); if (line != null) { this.line = Integer.parseInt(line); } else { this.line = -1; } String tm = (String) options.get("-r"); if (tm != null) { isTemporary = tm.equals("1"); } String hitValue = (String) options.get("-h"); if (hitValue != null) { this.hitValue = Integer.parseInt(hitValue); } String hitCondition = (String) options.get("-o"); setHitCondition(hitCondition); String exp = (String) options.get("--"); String disable = (String) options.get("-s"); if (disable.equals("disabled")) { this.setEnabled(false); } if (exp != null) { expression = Base64Helper.decodeString(exp); if (expression != null) expression = expression.trim(); } if (isWatch) { this.isModification = expression .charAt(expression.length() - 1) == '1'; this.isAccess = expression.charAt(expression.length() - 2) == '1'; this.expression = expression.substring(0, expression.length() - 2); } this.id = last_id++; } protected void setHitCondition(String hitCondition) { if (hitCondition != null) { if (hitCondition.equals(">=")) { this.hitCondition = 1; } if (hitCondition.equals("==")) { this.hitCondition = 2; } if (hitCondition.equals("%")) { this.hitCondition = 3; } } } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((file == null) ? 0 : file.hashCode()); result = prime * result + line; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final BreakPoint other = (BreakPoint) obj; if (file == null) { if (other.file != null) return false; } else if (!file.equals(other.file)) return false; if (line != other.line) return false; return true; } protected boolean isEnabled() { return enabled; } protected void setEnabled(boolean enabled) { this.enabled = enabled; } public String getType() { return type; } public String getState() { return ""; } public String getHitCondition() { if (hitCondition == 1) return ">="; if (hitCondition == 2) return "=="; if (hitCondition == 3) return "%"; return "=="; } }