001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common Development
008: * and Distribution License("CDDL") (collectively, the "License"). You
009: * may not use this file except in compliance with the License. You can obtain
010: * a copy of the License at https://glassfish.dev.java.net/public/CDDL+GPL.html
011: * or glassfish/bootstrap/legal/LICENSE.txt. See the License for the specific
012: * language governing permissions and limitations under the License.
013: *
014: * When distributing the software, include this License Header Notice in each
015: * file and include the License file at glassfish/bootstrap/legal/LICENSE.txt.
016: * Sun designates this particular file as subject to the "Classpath" exception
017: * as provided by Sun in the GPL Version 2 section of the License file that
018: * accompanied this code. If applicable, add the following below the License
019: * Header, with the fields enclosed by brackets [] replaced by your own
020: * identifying information: "Portions Copyrighted [year]
021: * [name of copyright owner]"
022: *
023: * Contributor(s):
024: *
025: * If you wish your version of this file to be governed by only the CDDL or
026: * only the GPL Version 2, indicate your decision by adding "[Contributor]
027: * elects to include this software in this distribution under the [CDDL or GPL
028: * Version 2] license." If you don't indicate a single choice of license, a
029: * recipient has the option to distribute your version of this file under
030: * either the CDDL, the GPL Version 2 or to extend the choice of license to
031: * its licensees as provided above. However, if you add GPL Version 2 code
032: * and therefore, elected the GPL Version 2 license, then the option applies
033: * only if the new code is made subject to such option by the copyright
034: * holder.
035: */
036: package com.sun.tools.xjc.outline;
037:
038: import com.sun.codemodel.JBlock;
039: import com.sun.codemodel.JExpression;
040: import com.sun.codemodel.JVar;
041: import com.sun.tools.xjc.model.CPropertyInfo;
042:
043: /**
044: * Encapsulates the access on a field.
045: *
046: * @author
047: * Kohsuke Kawaguchi (kohsuke.kawaguchi@sun.com)
048: */
049: public interface FieldAccessor {
050:
051: /**
052: * Dumps everything in this field into the given variable.
053: *
054: * <p>
055: * This generates code that accesses the field from outside.
056: *
057: * @param block
058: * The code will be generated into this block.
059: * @param $var
060: * Variable whose type is {@link FieldOutline#getRawType()}
061: */
062: void toRawValue(JBlock block, JVar $var);
063:
064: /**
065: * Sets the value of the field from the specified expression.
066: *
067: * <p>
068: * This generates code that accesses the field from outside.
069: *
070: * @param block
071: * The code will be generated into this block.
072: * @param uniqueName
073: * Identifier that the caller guarantees to be unique in
074: * the given block. When the callee needs to produce additional
075: * variables, it can do so by adding suffixes to this unique
076: * name. For example, if the uniqueName is "abc", then the
077: * caller guarantees that any identifier "abc.*" is unused
078: * in this block.
079: * @param $var
080: * The expression that evaluates to a value of the type
081: * {@link FieldOutline#getRawType()}.
082: */
083: void fromRawValue(JBlock block, String uniqueName, JExpression $var);
084:
085: /**
086: * Generates a code fragment to remove any "set" value
087: * and move this field to the "unset" state.
088: *
089: * @param body
090: * The code will be appended at the end of this block.
091: */
092: void unsetValues(JBlock body);
093:
094: /**
095: * Return an expression that evaluates to true only when
096: * this field has a set value(s).
097: *
098: * @return null
099: * if the isSetXXX/unsetXXX method does not make sense
100: * for the given field.
101: */
102: JExpression hasSetValue();
103:
104: /**
105: * Gets the {@link FieldOutline} from which
106: * this object is created.
107: */
108: FieldOutline owner();
109:
110: /**
111: * Short for <tt>owner().getPropertyInfo()</tt>
112: */
113: CPropertyInfo getPropertyInfo();
114: }
|