01: //Copyright (c) Kristofer Johanisson 2004, Hans-Joachim Daniels 2005
02: //
03: //This program is free software; you can redistribute it and/or modify
04: //it under the terms of the GNU General Public License as published by
05: //the Free Software Foundation; either version 2 of the License, or
06: //(at your option) any later version.
07: //
08: //This program is distributed in the hope that it will be useful,
09: //but WITHOUT ANY WARRANTY; without even the implied warranty of
10: //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11: //GNU General Public License for more details.
12: //
13: //You can either finde the file LICENSE or LICENSE.TXT in the source
14: //distribution or in the .jar file of this application
15:
16: package de.uka.ilkd.key.ocl.gf;
17:
18: import java.util.logging.Level;
19:
20: import de.uka.ilkd.key.casetool.ModelMethod;
21:
22: /**
23: * the GF editor uses this class as an interface for sending
24: * pre-/postconditions to Together
25: * @author Kristofer Johannisson & Hans-Joachim Daniels
26: */
27: public class CallbackPrePost extends ConstraintCallback {
28:
29: private ModelMethod rmm;
30:
31: /**
32: * just sets the field rmm
33: * @param rmm A representation of the method in the model,
34: * used to create the initial stub for GF and to save the constraint there.
35: */
36: public CallbackPrePost(ModelMethod rmm) {
37: this .rmm = rmm;
38: }
39:
40: /**
41: * saves the given OCL constraint in the Java file as a JavaDoc comment.
42: * @param ocl assumption: ocl constraint has form ... .. pre: .... ... post: ...
43: * Only one pre- and one postcondition is supported by TogetherCC!
44: */
45: public void sendConstraint(String ocl) {
46: if (logger.isLoggable(Level.FINE)) {
47: logger.fine("sendPrePost received OCL: " + ocl);
48: }
49:
50: final int postEnd = ocl.length();
51: final int postStart = ocl.lastIndexOf("post:") + 5;
52: final int preEnd = postStart - 5;
53: final int preStart = ocl.lastIndexOf("pre:", preEnd) + 4;
54: final String preCond = ocl.substring(preStart, preEnd).trim();
55: final String postCond = ocl.substring(postStart, postEnd)
56: .trim();
57: if (logger.isLoggable(Level.FINE)) {
58: logger.fine("pre: " + preCond);
59: logger.fine("post: " + postCond);
60: }
61:
62: //rmm.setMyGFAbs(abs);
63: rmm.setMyPreCond(preCond);
64: rmm.setMyPostCond(postCond);
65: rmm.setMyGFAbs(null); //delete that JavaDoc comment
66: }
67:
68: /**
69: * saves the given OCL constraint in the Java file as a JavaDoc comment
70: * in the GF tree syntax
71: * @param abs GF abstract syntax tree
72: */
73: public void sendAbstract(String abs) {
74: if (logger.isLoggable(Level.FINE)) {
75: logger.fine("sendPrePost received AST: " + abs);
76: }
77: //pass AST to Together
78: rmm.setMyGFAbs(abs.replaceAll("\\n", " "));
79: rmm.setMyPreCond(null); //delete that JavaDoc comment
80: rmm.setMyPostCond(null); //delete that JavaDoc comment
81: }
82: }
|