View Javadoc
1   /*
2    * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4    *
5    * This code is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU General Public License version 2 only, as
7    * published by the Free Software Foundation.  Oracle designates this
8    * particular file as subject to the "Classpath" exception as provided
9    * by Oracle in the LICENSE file that accompanied this code.
10   *
11   * This code is distributed in the hope that it will be useful, but WITHOUT
12   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14   * version 2 for more details (a copy is included in the LICENSE file that
15   * accompanied this code).
16   *
17   * You should have received a copy of the GNU General Public License version
18   * 2 along with this work; if not, write to the Free Software Foundation,
19   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20   *
21   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22   * or visit www.oracle.com if you need additional information or have any
23   * questions.
24   */
25  
26  /*
27   * This source code is provided to illustrate the usage of a given feature
28   * or technique and has been deliberately simplified. Additional steps
29   * required for a production-quality application, such as security checks,
30   * input validation and proper error handling, might not be present in
31   * this sample code.
32   */
33  
34  
35  package com.sun.tools.example.debug.bdi;
36  
37  public abstract class WatchpointSpec extends EventRequestSpec {
38      final String fieldId;
39  
40      WatchpointSpec(EventRequestSpecList specs,
41                     ReferenceTypeSpec refSpec, String fieldId) {
42          super(specs, refSpec);
43          this.fieldId = fieldId;
44  //        if (!isJavaIdentifier(fieldId)) {
45  //            throw new MalformedMemberNameException(fieldId);
46  //        }
47      }
48  
49      @Override
50      void notifySet(SpecListener listener, SpecEvent evt) {
51          listener.watchpointSet(evt);
52      }
53  
54      @Override
55      void notifyDeferred(SpecListener listener, SpecEvent evt) {
56          listener.watchpointDeferred(evt);
57      }
58  
59      @Override
60      void notifyResolved(SpecListener listener, SpecEvent evt) {
61          listener.watchpointResolved(evt);
62      }
63  
64      @Override
65      void notifyDeleted(SpecListener listener, SpecEvent evt) {
66          listener.watchpointDeleted(evt);
67      }
68  
69      @Override
70      void notifyError(SpecListener listener, SpecErrorEvent evt) {
71          listener.watchpointError(evt);
72      }
73  
74      @Override
75      public int hashCode() {
76          return refSpec.hashCode() + fieldId.hashCode() +
77              getClass().hashCode();
78      }
79  
80      @Override
81      public boolean equals(Object obj) {
82          if (obj instanceof WatchpointSpec) {
83              WatchpointSpec watchpoint = (WatchpointSpec)obj;
84  
85              return fieldId.equals(watchpoint.fieldId) &&
86                     refSpec.equals(watchpoint.refSpec) &&
87                     getClass().equals(watchpoint.getClass());
88          } else {
89              return false;
90          }
91      }
92  
93      @Override
94      public String errorMessageFor(Exception e) {
95          if (e instanceof NoSuchFieldException) {
96              return ("No field " + fieldId + " in " + refSpec);
97          } else {
98              return super.errorMessageFor(e);
99          }
100     }
101 }