01: /*
02: * Copyright 2005 Joe Walker
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16: package org.directwebremoting.extend;
17:
18: /**
19: * A simple data container for 2 strings that comprise information about how a
20: * Java object has been converted into Javascript.
21: * <p>There are potentially 3 parts to a variable in Javascript. If the variable
22: * is not something that can recurse then only the assignCode will contain data.
23: * Otherwise all the parts will be filled out.
24: * <ul>
25: * <li>declareCode: To prevent problems with recursion, we declare everything
26: * first. A declaration will look something like <code>var s0 = [];</code> or
27: * <code>var s1 = {};</code>.</li>
28: * <li>buildCode: Next we fill in the contents of the objects and arrays.</li>
29: * <li>assignCode: This is an accessor for the name of the variable so we can
30: * refer to anything that has been declared.</li>
31: * </ul>
32: * @author Joe Walker [joe at getahead dot ltd dot uk]
33: */
34: public interface OutboundVariable {
35: /**
36: * A script to declare the variable so it can be referred to. This script
37: * is guaranteed not to refer to anything that can recurse
38: * @return Returns the declareCode
39: */
40: String getDeclareCode();
41:
42: /**
43: * A script that completes the definition of this variable, and may contain
44: * reference to other declared variables.
45: * @return Returns the buildCode.
46: */
47: String getBuildCode();
48:
49: /**
50: * A short script that can be used to refer to this variable
51: * @return Returns the assignCode.
52: */
53: String getAssignCode();
54:
55: /**
56: * Get a reference to this OutboundVariable.
57: * If <code>this</code> already is a reference then this method returns
58: * <code>this</code>, or if not it creates one that does.
59: * @return An OutboundVariable that refers to this one.
60: */
61: OutboundVariable getReferenceVariable();
62:
63: /**
64: * Things work out if they are doubly referenced during the conversion
65: * process, and can't be sure how to create output until that phase is done.
66: * This method creates the assign code such that other variables can
67: * refer to us when creating build and declare codes
68: */
69: void prepareAssignCode();
70:
71: /**
72: * Create build and declare codes.
73: * @see #prepareAssignCode()
74: */
75: void prepareBuildDeclareCodes();
76: }
|