blob: e42e5852fc14a4c8f40f6eb81150251e69835bf3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.beans;
import java.awt.Image;
import java.beans.IntrospectionException;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror;
import org.netbeans.api.java.source.ElementHandle;
import org.netbeans.api.java.source.TypeMirrorHandle;
import static org.netbeans.modules.beans.BeanUtils.*;
/** Class representing a JavaBeans Property
* @author Petr Hrebejk
*/;
public class PropertyPattern extends Pattern {
/** Constant for READ/WRITE mode of properties */
public static final int READ_WRITE = 1;
/** Constant for READ ONLY mode of properties */
public static final int READ_ONLY = 2;
/** Constant for WRITE ONLY mode of properties */
public static final int WRITE_ONLY = 4;
/** Constant for PropertyChange */
static final String PROPERTY_CHANGE = "firePropertyChange"; // NOI18N
/** Constant for VetoableChange */
static final String VETOABLE_CHANGE = "fireVetoableChange"; // NOI18N
/** Getter method of this property */
protected ElementHandle<ExecutableElement> getterMethod;
/** Setter method of this property */
protected ElementHandle<ExecutableElement> setterMethod;
/** Field which probably belongs to this property */
protected ElementHandle<VariableElement> estimatedField;
protected String typeName;
/** Creates new PropertyPattern one of the methods may be null.
* @param patternAnalyser patternAnalyser which creates this Property.
* @param getterMethod getterMethod of the property or <CODE>null</CODE>.
* @param setterMethod setterMethod of the property or <CODE>null</CODE>.
* @throws IntrospectionException If specified methods do not follow beans Property rules.
*/
public PropertyPattern( PatternAnalyser patternAnalyser,
ExecutableElement getterMethod,
ExecutableElement setterMethod,
VariableElement estimatedField,
TypeMirror type,
String name)
throws IntrospectionException {
super( patternAnalyser, Pattern.Kind.PROPERTY, name, TypeMirrorHandle.create(type) );
this.getterMethod = getterMethod == null ? null : ElementHandle.create(getterMethod);
this.setterMethod = setterMethod == null ? null : ElementHandle.create(setterMethod);
this.estimatedField = estimatedField == null ? null : ElementHandle.create(estimatedField);
this.typeName = typeAsString(type);
}
// Getters and setters -----------------------------------------------------
@Override
public Image getIcon() {
switch ( getMode() ) {
case READ_ONLY:
return PROPERTY_READ;
case WRITE_ONLY:
return PROPERTY_WRITE;
case READ_WRITE:
return PROPERTY_READ_WRITE;
}
return null;
}
@Override
public String getHtmlDisplayName() {
return name + " : <font color=" + TYPE_COLOR + "> " + typeName + "</font>"; // NOI18N
}
/** Gets the estimated field
* @return Field which (probably) belongs to the property.
*/
public ElementHandle<VariableElement> getEstimatedField( ) {
return estimatedField;
}
/** Returns the getter method
* @return Getter method of the property
*/
public ElementHandle<ExecutableElement> getGetterMethod() {
return getterMethod;
}
/** Returns the setter method
* @return Setter method of the property
*/
public ElementHandle<ExecutableElement> getSetterMethod() {
return setterMethod;
}
/** Sets the name of PropertyPattern
* @param name New name of the property.
* @throws JmiException If the modification of source code is impossible.
*/
public void setName( String name ) throws IllegalArgumentException {
throw new UnsupportedOperationException();
// if ( !Utilities.isJavaIdentifier( name ) )
// throw new IllegalArgumentException( "Invalid event source name" ); // NOI18N
//
// JMIUtils.beginTrans(true);
// boolean rollback = true;
// try {
// setNameImpl(name);
// rollback = false;
// } finally {
// JMIUtils.endTrans(rollback);
// }
}
/** Returns the mode of the property {@link #READ_WRITE READ_WRITE}, {@link #READ_ONLY READ_ONLY}
* or {@link #WRITE_ONLY WRITE_ONLY}
* @return Mode of the property
*/
public int getMode() {
if ( setterMethod != null && getterMethod != null )
return READ_WRITE;
else if ( getterMethod != null && setterMethod == null )
return READ_ONLY;
else if ( setterMethod != null && getterMethod == null )
return WRITE_ONLY;
else
return 0;
}
// /** Creates new property pattern with extended options
// * @param patternAnalyser patternAnalyser which creates this Property.
// * @param name Name of the Property.
// * @param type Type of the Property.
// * @param mode {@link #READ_WRITE Mode} of the new property.
// * @param bound Is the Property bound?
// * @param constrained Is the property constrained?
// * @param withField Should be the private field for this property genareted?
// * @param withReturn Generate return statement in getter?
// * @param withSet Generate seter statement for private field in setter.
// * @param withSupport Generate PropertyChange support?
// * @return Newly created PropertyPattern.
// */
// static PropertyPattern create( PatternAnalyser patternAnalyser,
// String name, String type,
// int mode, boolean bound, boolean constrained,
// boolean withField, boolean withReturn,
// boolean withSet, boolean withSupport ) throws GenerateBeanException {
//
// return create(patternAnalyser, name, type, mode, bound, constrained, withField, withReturn, withSet, withSupport, false, false);
// }
//
// /** Creates new property pattern with extended options
// * @param patternAnalyser patternAnalyser which creates this Property.
// * @param name Name of the Property.
// * @param type Type of the Property.
// * @param mode {@link #READ_WRITE Mode} of the new property.
// * @param bound Is the Property bound?
// * @param constrained Is the property constrained?
// * @param withField Should be the private field for this property genareted?
// * @param withReturn Generate return statement in getter?
// * @param withSet Generate seter statement for private field in setter.
// * @param withSupport Generate PropertyChange support?
// * @param useSupport use change support without prompting
// * @param fromField signalize that all action are activatet on field
// * @return Newly created PropertyPattern.
// */
// static PropertyPattern create( PatternAnalyser patternAnalyser,
// String name, String type,
// int mode, boolean bound, boolean constrained,
// boolean withField, boolean withReturn,
// boolean withSet, boolean withSupport,
// boolean useSupport, boolean fromField ) throws GenerateBeanException {
//
// assert JMIUtils.isInsideTrans();
// PropertyPattern pp = new PropertyPattern( patternAnalyser );
//
// pp.name = name;
// pp.type = patternAnalyser.findType(type);
//
// // Generate field
// if ( ( withField || withSupport ) && !fromField ) {
// try {
// pp.generateField( true );
// } catch (GenerateBeanException e) {
// DialogDisplayer.getDefault().notify(
// new NotifyDescriptor.Message(
// PatternNode.getString("MSG_Cannot_Create_Field"), // NOI18N
// NotifyDescriptor.WARNING_MESSAGE));
// }
// }
//
// // Ensure property change support field and methods exist
// String supportName = null;
// String vetoSupportName = null;
//
// if ( withSupport ) {
// // i try to generate support - try to look up if not in the parent defined
//
// boolean boundSupport = bound;
// boolean constrainedSupport = constrained;
//
// if( !useSupport ){
// if( boundSupport )
// if( ( supportName = EventSetInheritanceAnalyser.showInheritanceEventDialog(EventSetInheritanceAnalyser.detectPropertyChangeSupport( pp.getDeclaringClass()), "PropertyChangeSupport")) != null ) // NOI18N
// boundSupport = false;
// if( constrainedSupport )
// if( ( vetoSupportName = EventSetInheritanceAnalyser.showInheritanceEventDialog(EventSetInheritanceAnalyser.detectVetoableChangeSupport( pp.getDeclaringClass()), "VetoableChangeSupport")) != null ) // NOI18N
// constrainedSupport = false;
// }
// else{
// if( boundSupport )
// if( ( supportName = EventSetInheritanceAnalyser.getInheritanceEventSupportName(EventSetInheritanceAnalyser.detectPropertyChangeSupport( pp.getDeclaringClass()), "PropertyChangeSupport")) != null ) // NOI18N
// boundSupport = false;
// if( constrainedSupport )
// if( ( vetoSupportName = EventSetInheritanceAnalyser.getInheritanceEventSupportName(EventSetInheritanceAnalyser.detectVetoableChangeSupport( pp.getDeclaringClass()), "VetoableChangeSupport")) != null ) // NOI18N
// constrainedSupport = false;
// }
//
// if ( boundSupport )
// supportName = BeanPatternGenerator.supportField( pp.getDeclaringClass() );
// if ( constrainedSupport )
// vetoSupportName = BeanPatternGenerator.vetoSupportField( pp.getDeclaringClass() );
//
// if ( boundSupport )
// BeanPatternGenerator.supportListenerMethods( pp.getDeclaringClass(), supportName );
// if ( constrainedSupport )
// BeanPatternGenerator.vetoSupportListenerMethods( pp.getDeclaringClass(), vetoSupportName );
// }
//
// if ( mode == READ_WRITE || mode == READ_ONLY )
// pp.generateGetterMethod( BeanPatternGenerator.propertyGetterBody( name, withReturn, !fromField ), true );
//
// if ( mode == READ_WRITE || mode == WRITE_ONLY )
// pp.generateSetterMethod( BeanPatternGenerator.propertySetterBody( name, pp.getType(),
// bound, constrained, withSet, withSupport, supportName, vetoSupportName, !fromField ), constrained, true );
//
// return pp;
// }
//
//
//
//
//
// private void setNameImpl( String name ) throws JmiException {
// assert JMIUtils.isInsideTrans();
// String oldName = this.name;
// this.name = name;
// name = capitalizeFirstLetter( name );
//
// if ( getterMethod != null ) {
// String getterMethodID = ( getterMethod.getName().startsWith("get") ? // NOI18N
// "get" : "is" ) + name ; // NOI18N
// getterMethod.setName( getterMethodID );
// String oldGetterComment = MessageFormat.format( PatternNode.getString( "COMMENT_PropertyGetter" ),
// new Object[] { oldName } );
// String newGetterComment = MessageFormat.format( PatternNode.getString( "COMMENT_PropertyGetter" ),
// new Object[] { getName() } );
// String javadocText = getterMethod.getJavadocText();
// if (javadocText != null &&
// oldGetterComment.trim().equals(javadocText.trim())) {
// getterMethod.setJavadocText( newGetterComment );
// }
// }
// if ( setterMethod != null ) {
// String setterMethodID = "set" + name; // NOI18N
// setterMethod.setName( setterMethodID );
// String oldSetterComment = MessageFormat.format( PatternNode.getString( "COMMENT_PropertySetter" ),
// new Object[] { oldName, oldName } );
// String newSetterComment = MessageFormat.format( PatternNode.getString( "COMMENT_PropertySetter" ),
// new Object[] { getName(), getName() } );
// String javadocText = setterMethod.getJavadocText();
// if (javadocText != null &&
// oldSetterComment.trim().equals(javadocText.trim())) {
// setterMethod.setJavadocText( newSetterComment );
// }
// }
//
// // Ask if to set the estimated field
// if ( estimatedField != null ) {
// String oldFieldComment = MessageFormat.format( PatternNode.getString( "COMMENT_PropertyField" ),
// new Object[] { oldName } );
// String newFieldComment = MessageFormat.format( PatternNode.getString( "COMMENT_PropertyField" ),
// new Object[] { getName() } );
// String javadocText = estimatedField.getJavadocText();
// if (javadocText != null &&
// oldFieldComment.trim().equals(javadocText.trim())) {
// estimatedField.setJavadocText(newFieldComment);
// }
//
// int mode = getMode();
// Format fmt = SourceNodes.createElementFormat ("{m} {t} {n}"); // NOI18N
// String mssg = MessageFormat.format( PatternNode.getString( "FMT_ChangeFieldName" ),
// new Object[] { fmt.format (estimatedField) } );
// NotifyDescriptor nd = new NotifyDescriptor.Confirmation ( mssg, NotifyDescriptor.YES_NO_OPTION );
// if ( DialogDisplayer.getDefault().notify( nd ).equals( NotifyDescriptor.YES_OPTION ) ) {
// String fieldName = Introspector.decapitalize(name);
//
// if( PropertyActionSettings.getDefault().getPropStyle().equals(PropertyActionSettings.GENERATE_UNDERSCORED))
// fieldName = PropertyActionSettings.GENERATE_UNDERSCORED + fieldName;
// estimatedField.setName(fieldName);
// if ( (mode == READ_WRITE || mode == READ_ONLY) && getterMethod !=null ) {
// String existingGetterBody = getterMethod.getBodyText().trim();
// String oldGetterBody1 = BeanPatternGenerator.propertyGetterBody( oldName, true, true ).trim();
// String oldGetterBody2 = BeanPatternGenerator.propertyGetterBody( oldName, true, false ).trim();
// if (existingGetterBody.equals(oldGetterBody1)) {
// getterMethod.setBodyText(BeanPatternGenerator.propertyGetterBody( fieldName, true, true));
// } else if (existingGetterBody.equals(oldGetterBody2)) {
// getterMethod.setBodyText(BeanPatternGenerator.propertyGetterBody( fieldName, true, false));
// }
// }
// if ( (mode == READ_WRITE || mode == WRITE_ONLY) && setterMethod != null) {
// String existingSetterBody = setterMethod.getBodyText().trim();
// String oldSetterBody = BeanPatternGenerator.propertySetterBody (oldName, this.type, false, false, true, false, null, null).trim();
// if (existingSetterBody.equals(oldSetterBody)) {
// setterMethod.setBodyText(BeanPatternGenerator.propertySetterBody (fieldName, getType(), false, false, true, false, null, null));
// if ( setterMethod != null ) {
// Parameter param = (Parameter) setterMethod.getParameters().get(0);
// param.setName(Introspector.decapitalize( name ));
// }
// }
// }
// }
// }
// }
//
//
// /** Sets the property to be writable
// * @param mode New Mode {@link #READ_WRITE READ_WRITE}, {@link #READ_ONLY READ_ONLY}
// * or {@link #WRITE_ONLY WRITE_ONLY}
// * @throws GenerateBeanException If the modification of source code is impossible.
// */
// public void setMode( int mode ) throws GenerateBeanException, JmiException {
//
// if ( getMode() == mode )
// return;
//
// JMIUtils.beginTrans(true);
// boolean rollback = true;
// try {
// switch (mode) {
// case READ_WRITE:
// if (getterMethod == null)
// generateGetterMethod(null, true);
// if (setterMethod == null)
// generateSetterMethod(null, false, true);
// break;
// case READ_ONLY:
// if (getterMethod == null)
// generateGetterMethod(null, true);
// if (setterMethod != null) {
// NotifyDescriptor nd = new NotifyDescriptor.Confirmation(PatternNode.getString("MSG_Delete_Setter") + PatternNode.getString("MSG_Continue_Confirm"), NotifyDescriptor.YES_NO_OPTION);
// DialogDisplayer.getDefault().notify(nd);
// if (nd.getValue().equals(NotifyDescriptor.YES_OPTION)) {
// deleteSetterMethod();
// }
// }
// break;
// case WRITE_ONLY:
// if (setterMethod == null)
// generateSetterMethod(null, false, true);
// if (getterMethod != null) {
// NotifyDescriptor nd = new NotifyDescriptor.Confirmation(PatternNode.getString("MSG_Delete_Getter") + PatternNode.getString("MSG_Continue_Confirm"), NotifyDescriptor.YES_NO_OPTION);
// DialogDisplayer.getDefault().notify(nd);
// if (nd.getValue().equals(NotifyDescriptor.YES_OPTION)) {
// deleteGetterMethod();
// }
// }
// break;
// }
// rollback = false;
// } finally {
// JMIUtils.endTrans(rollback);
// }
// }
//
//
// /** Sets the type of propertyPattern
// * @param type New type of the property
// * @throws JmiException If the modification of source code is impossible
// */
// public void setType(Type type) throws JmiException {
// JMIUtils.beginTrans(true);
// boolean rollback = true;
// try {
// setTypeImpl(type);
// rollback = false;
// } finally {
// JMIUtils.endTrans(rollback);
// }
// }
//
// private void setTypeImpl(Type type) throws JmiException {
// assert JMIUtils.isInsideTrans();
// if ( this.type.equals( type ) )
// return;
//
// if (getterMethod != null ) {
// if (JMIUtils.isPrimitiveType(this.type, PrimitiveTypeKindEnum.BOOLEAN)) {
// getterMethod.setName("get" + capitalizeFirstLetter( getName() ) ); // NOI18N
// } else if (JMIUtils.isPrimitiveType(type, PrimitiveTypeKindEnum.BOOLEAN)) {
// String mssg = MessageFormat.format( PatternNode.getString( "FMT_ChangeToIs" ),
// new Object[] { capitalizeFirstLetter( getName() ) } );
// NotifyDescriptor nd = new NotifyDescriptor.Confirmation ( mssg, NotifyDescriptor.YES_NO_OPTION );
// DialogDisplayer.getDefault().notify( nd );
// if( nd.getValue().equals( NotifyDescriptor.YES_OPTION ) ) {
// getterMethod.setName( "is" + capitalizeFirstLetter( getName() ) ); // NOI18N
// }
// }
// getterMethod.setType( type );
// }
//
// if (setterMethod != null ) {
// List/*<Parameter>*/ params = setterMethod.getParameters();
// for (Iterator it = params.iterator(); it.hasNext();) {
// Parameter param = (Parameter) it.next();
// Type oldType = param.getType();
// param.setType( type );
//
// String body = setterMethod.getBodyText();
// //test if body contains change support
// if( body != null && ( body.indexOf(PROPERTY_CHANGE) != -1 || body.indexOf(VETOABLE_CHANGE) != -1 ) ) {
// String mssg = MessageFormat.format( PatternNode.getString( "FMT_ChangeMethodBody" ),
// new Object[] { setterMethod.getName() } );
// NotifyDescriptor nd = new NotifyDescriptor.Confirmation ( mssg, NotifyDescriptor.YES_NO_OPTION );
// DialogDisplayer.getDefault().notify( nd );
// if( nd.getValue().equals( NotifyDescriptor.YES_OPTION ) ) {
// String newBody = regeneratePropertySupport( setterMethod.getBodyText(), null, param.getName(), type, oldType );
// if( newBody != null )
// setterMethod.setBodyText(newBody);
//
// newBody = regeneratePropertySupport( setterMethod.getBodyText(), PROPERTY_CHANGE, param.getName(), type, oldType );
// if( newBody != null )
// setterMethod.setBodyText(newBody);
//
// newBody = regeneratePropertySupport( setterMethod.getBodyText(), VETOABLE_CHANGE, param.getName(), type, oldType );
// if( newBody != null )
// setterMethod.setBodyText(newBody);
// }
// }
// }
// }
//
// this.type = type;
//
// // Ask if to change estimated field Type
//
// if ( estimatedField != null ) {
// Format fmt = SourceNodes.createElementFormat("{m} {t} {n}"); // NOI18N
// String mssg = MessageFormat.format( PatternNode.getString( "FMT_ChangeFieldType" ),
// new Object[] { fmt.format (estimatedField) } );
// NotifyDescriptor nd = new NotifyDescriptor.Confirmation ( mssg, NotifyDescriptor.YES_NO_OPTION );
// if ( DialogDisplayer.getDefault().notify( nd ).equals( NotifyDescriptor.YES_OPTION ) ) {
// estimatedField.setType(type);
// }
// else {
// estimatedField = null;
// }
// }
//
// }
//
// /**
// * @param methodBody old method body
// * @param changeType .. propertyChange, vetoableChange or null if need to change only support field
// * @param name of property
// * @param type new type of property value
// * @param oldType old type of property value
// * @return null if no change is possible or new body if it is
// */
// protected String regeneratePropertySupport( String methodBody, String changeType, String name, Type type, Type oldType ) throws JmiException {
// if( methodBody == null )
// return null;
//
// int first = -1;
// boolean post_index = false;
// boolean pre_index = false;
// String propertyStyle = PropertyActionSettings.getDefault().getPropStyle();
//
// assert JMIUtils.isInsideTrans();
// if( oldType instanceof Array)
// oldType = getPrimitiveType((Array) oldType);
// //will search for line containing property support or field
// if( changeType != null ){
// if( (first = methodBody.indexOf(changeType)) == -1 )
// return null;
// }
// else{
// String oldVarLine = " old" + Pattern.capitalizeFirstLetter( name ) + " = " + propertyStyle + name; // NOI18N
// if( (first = methodBody.indexOf( (oldType.getName() + oldVarLine + ";") )) == -1 ) { //non indexed // NOI18N
// if( (first = methodBody.indexOf( (oldType.getName() + oldVarLine + "[index];") )) == -1 ) { //indexed // NOI18N
// if( (first = methodBody.indexOf( (oldType.getName() + "[]" + oldVarLine + ";") )) == -1 ) { //indexed // NOI18N
// return null;
// }
// else
// pre_index = true;
// }
// else
// post_index = true;
// }
// }
//
// if( first == -1 )
// return null;
//
// //find end of statement
// int last = methodBody.indexOf(';', first);
// if( first >= last )
// return null;
//
// StringBuffer newBody = new StringBuffer(100);
// if( changeType != null ){
// newBody.append( changeType + " (\"").append( name ).append( "\", " ); // NOI18N
//
// if ( type instanceof PrimitiveType ) {
// newBody.append( "new ").append( BeanPatternGenerator.getWrapperClassName( type )).append( " (" ); // NOI18N
// newBody.append( "old" ).append( Pattern.capitalizeFirstLetter( name ) ); // NOI18N
// newBody.append( "), " ); // NOI18N
// newBody.append( "new ").append( BeanPatternGenerator.getWrapperClassName( type )).append( " (" ); // NOI18N
// newBody.append( name ).append( "))" ); // NOI18N
// }
// else {
// newBody.append( "old" ).append( Pattern.capitalizeFirstLetter( name ) ); // NOI18N
// newBody.append( ", " ).append( name ).append( ")" ); // NOI18N
// }
// }
// else{
// newBody.append( type.getName() );
// //if( pre_index ){
// // newBody.append( "[]" );
// //}
// newBody.append( " old" ).append( Pattern.capitalizeFirstLetter( name ) ); // NOI18N
// newBody.append( " = " ).append( propertyStyle ).append( name ); // NOI18N
// if( post_index ){
// newBody.append( "[index]" ); // NOI18N
// }
// }
//
// StringBuffer sb = new StringBuffer(methodBody);
// sb.delete(first, last);
// sb.insert(first, newBody);
// return sb.toString();
// }
//
// private static Type getPrimitiveType(Array atype) throws JmiException {
// assert JMIUtils.isInsideTrans();
// Type type = atype.getType();
// while (type instanceof Array) {
// type = ((Array) type).getType();
// }
// return type;
// }
//
// /** Gets the cookie of the first available method
// * @param cookieType Class of the Cookie
// * @return Cookie of Getter or Setter MethodElement
// */
// public Node.Cookie getCookie( Class cookieType ) {
// return super.getCookie(cookieType);
// }
//
//
//
// /** Sets the estimated field
// * @param field Field for the property
// */
// void setEstimatedField( Field field ) {
// estimatedField = field;
// }
//
// /** Destroys methods associated methods with the pattern in source
// */
// public void destroy() throws JmiException {
// assert JMIUtils.isInsideTrans();
// if (estimatedField != null) {
// Format fmt = SourceNodes.createElementFormat("{m} {t} {n}"); // NOI18N
// String mssg = MessageFormat.format(PatternNode.getString("FMT_DeleteField"),
// new Object[]{fmt.format(estimatedField)});
// NotifyDescriptor nd = new NotifyDescriptor.Confirmation(mssg, NotifyDescriptor.YES_NO_OPTION);
// if (DialogDisplayer.getDefault().notify(nd).equals(NotifyDescriptor.YES_OPTION)) {
// deleteEstimatedField();
// }
// }
//
// deleteGetterMethod();
// deleteSetterMethod();
// }
//
//
// // METHODS FOR GENERATING AND DELETING METHODS AND FIELDS--------------------
//
// /** Generates getter method without body and without Javadoc comment.
// * @throws GenerateBeanException if modification of source code is impossible.
// */
// void generateGetterMethod() throws GenerateBeanException, JmiException {
// generateGetterMethod( null, false );
// }
//
// /** Generates getter method with body and optionaly with Javadoc comment.
// * @param body Body of the method
// * @param javadoc Generate Javadoc comment?
// * @throws GenerateBeanException if modification of source code is impossible.
// */
// void generateGetterMethod( String body, boolean javadoc ) throws GenerateBeanException, JmiException {
// assert JMIUtils.isInsideTrans();
// JavaClass declaringClass = getDeclaringClass();
// JavaModelPackage jmodel = JavaMetamodel.getManager().getJavaExtent(declaringClass);
// Method newGetter = jmodel.getMethod().createMethod();
//
// String namePrefix = JMIUtils.isPrimitiveType(type, PrimitiveTypeKindEnum.BOOLEAN) ? "is" : "get"; // NOI18N
// newGetter.setName( namePrefix + capitalizeFirstLetter( getName() ) );
// newGetter.setType( type );
// newGetter.setModifiers( Modifier.PUBLIC );
//
// if ( declaringClass.isInterface() ) {
// newGetter.setBody( null );
// }
// else if ( body != null ) {
// newGetter.setBodyText( body );
// }
//
// if ( javadoc ) {
// String comment = MessageFormat.format( PatternNode.getString( "COMMENT_PropertyGetter" ),
// new Object[] { getName() } );
// newGetter.setJavadocText( comment );
// }
//
// if ( declaringClass == null ) {
// //System.out.println ("nodecl - gen getter"); // NOI18N
// throw new GenerateBeanException();
// }
// else {
// declaringClass.getFeatures().add(newGetter);
// getterMethod = newGetter;
// }
//
// }
//
// /** Generates setter method without body and without Javadoc comment.
// * @throws GenerateBeanException If modification of source code is impossible.
// */
// void generateSetterMethod() throws GenerateBeanException, JmiException {
// generateSetterMethod( null, false, false );
// }
//
// /** Generates setter method with body and optionaly with Javadoc comment.
// * @param body Body of the method
// * @param javadoc Generate Javadoc comment?
// * @param constrained Is the property constrained?
// * @throws GenerateBeanException If modification of source code is impossible.
// */
// void generateSetterMethod( String body, boolean constrained, boolean javadoc ) throws GenerateBeanException, JmiException {
// assert JMIUtils.isInsideTrans();
// JavaClass declaringClass = getDeclaringClass();
// JavaModelPackage jmodel = JavaMetamodel.getManager().getJavaExtent(declaringClass);
// Method newSetter = jmodel.getMethod().createMethod();
//
// newSetter.setName( "set" + capitalizeFirstLetter( getName() ) ); // NOI18N
// newSetter.setType( patternAnalyser.findType("void") ); // NOI18N
// newSetter.setModifiers( Modifier.PUBLIC );
// Parameter param = jmodel.getParameter().createParameter();
// param.setName(name);
// param.setType(type);
// newSetter.getParameters().add(param);
// if ( constrained ) {
// MultipartId exception = jmodel.getMultipartId().
// createMultipartId("java.beans.PropertyVetoException", null, null); // NOI18N
// newSetter.getExceptionNames().add(exception);
// }
//
// if ( declaringClass.isInterface() ) {
// newSetter.setBody( null );
// }
// else if ( body != null ) {
// newSetter.setBodyText( body );
// }
//
// if ( javadoc ) {
// String comment = MessageFormat.format( PatternNode.getString( "COMMENT_PropertySetter" ),
// new Object[] { getName(), name } );
// if ( constrained )
// comment = comment + PatternNode.getString( "COMMENT_Tag_ThrowsPropertyVeto" );
// newSetter.setJavadocText( comment );
// }
//
//
// if ( declaringClass == null ) {
// //System.out.println ("nodecl - gen setter"); // NOI18N
// throw new GenerateBeanException();
// }
// else {
// declaringClass.getFeatures().add(newSetter);
// setterMethod = newSetter;
// }
// }
//
// /** Generates fied for the property. No javadoc comment is generated.
// * @throws GenerateBeanException If modification of source code is impossible.
// */
// void generateField() throws GenerateBeanException, JmiException {
// generateField( false );
// }
//
// /** Generates field for the property.
// * @param javadoc Generate javadoc comment?
// * @throws GenerateBeanException If modification of source code is impossible.
// */
// void generateField( boolean javadoc ) throws GenerateBeanException, JmiException {
// assert JMIUtils.isInsideTrans();
// JavaClass declaringClass = getDeclaringClass();
// JavaModelPackage jmodel = JavaMetamodel.getManager().getJavaExtent(declaringClass);
// Field newField = jmodel.getField().createField();
//
// String name = getName();
// if( PropertyActionSettings.getDefault().getPropStyle().equals(PropertyActionSettings.GENERATE_UNDERSCORED))
// name = PropertyActionSettings.GENERATE_UNDERSCORED + name;
// name = Introspector.decapitalize( name );
// newField.setName( name );
// newField.setType( type );
// newField.setModifiers( Modifier.PRIVATE );
// if ( javadoc ) {
// String comment = MessageFormat.format( PatternNode.getString( "COMMENT_PropertyField" ),
// new Object[] { name } );
// newField.setJavadocText( comment );
// }
// if ( declaringClass == null ) {
// //System.out.println ("nodecl - gen setter"); // NOI18N
// throw new IllegalStateException("Missing declaring class"); // NOI18N
// } else {
// String newFieldName = newField.getName();
// Field f = declaringClass.getField(newFieldName, false);
// if ( f == null ){
// declaringClass.getFeatures().add(newField);
// estimatedField = newField;
// } else{
// if( (f.getModifiers() & Modifier.STATIC) != 0 ) //static can not be accessed via property
// throw new GenerateBeanException();
// if( !f.getType().equals(newField.getType()) ) //type not equal
// throw new GenerateBeanException();
// }
// }
// }
//
// /** Deletes the estimated field in source
// * @throws JmiException If modification of source code is impossible.
// */
// void deleteEstimatedField() {
//
// if ( estimatedField == null )
// return;
//
// JavaClass declaringClass = getDeclaringClass();
// declaringClass.getFeatures().remove(estimatedField);
// estimatedField = null;
// }
//
//
// /** Deletes the setter method in source
// * @throws JmiException If modification of source code is impossible.
// */
// void deleteGetterMethod() {
//
// if ( getterMethod == null )
// return;
//
// JavaClass declaringClass = getDeclaringClass();
// declaringClass.getFeatures().remove(getterMethod);
// getterMethod = null;
// }
//
// /** Deletes the setter method in source
// * @throws JmiException If modification of source code is impossible.
// */
// void deleteSetterMethod() {
//
// if ( setterMethod == null )
// return;
//
// JavaClass declaringClass = getDeclaringClass();
// declaringClass.getFeatures().remove(setterMethod);
// setterMethod = null;
//
// }
//
// // UTILITY METHODS ----------------------------------------------------------
//
// /** Sets the properties to values of other property pattern. If the
// * properties change fires PropertyChange event.
// * @param src Source PropertyPattern it's properties will be copied.
// */
// void copyProperties( PropertyPattern src ) {
// boolean changed = !src.getType().equals( getType() ) ||
// !src.getName().equals( getName() ) ||
// !(src.getMode() == getMode()) ||
// !(src.getEstimatedField() == null ? estimatedField == null : src.getEstimatedField().equals( estimatedField ) );
//
// if ( src.getGetterMethod() != getterMethod )
// getterMethod = src.getGetterMethod();
// if ( src.getSetterMethod() != setterMethod )
// setterMethod = src.getSetterMethod();
// if ( src.getEstimatedField() != estimatedField )
// estimatedField = src.getEstimatedField();
//
// if ( changed ) {
// try {
// type = findPropertyType();
// }
// catch ( java.beans.IntrospectionException e ) {
// }
// name = findPropertyName();
//
// // XXX cannot be fired inside mdr transaction; post to dedicated thread or redesigne somehow
// firePropertyChange( new java.beans.PropertyChangeEvent( this, null, null, null ) );
// }
// }
}