All Downloads are FREE. Search and download functionalities are using the official Maven repository.

java.Attribute.xpt Maven / Gradle / Ivy

There is a newer version: 1.24.1
Show newest version
«IMPORT uml»
«IMPORT JMM»
«IMPORT jeaf»


«EXTENSION java::GeneratorCommons»
«EXTENSION java::Naming»
«EXTENSION entity::ModelProperties»
«EXTENSION functions::Internal»
«EXTENSION functions::SoftLink»
«EXTENSION functions::AddToJSON»
«EXTENSION functions::JEAFDeprecated»

// this properties should be processed
// for now all properties should be processed
«DEFINE PropertyDeclaration FOR Property»
    «IF this.generateBackwardCompatibility() == false»
	    «EXPAND jeafgenerator::api::ClassExtensionHook::BeforeClassPropertyDeclaration(this.type.fqn())»
	    «IF this.isSoftLink()»
	        «EXPAND SoftLinkPropertyDeclaration FOR (SoftLink) this»
	    «ELSEIF this.association == null»
	        «EXPAND DoPropertyDeclaration»
	    «ELSE»
	        «EXPAND DoAssociationPropertyDeclaration»
	    «ENDIF»
	    «EXPAND jeafgenerator::api::ClassExtensionHook::AfterClassPropertyDeclaration(this.type.fqn())»
    «ENDIF»
«ENDDEFINE»


«DEFINE PropertyAccessors FOR Property»
    «IF this.isSoftLink()»
        «EXPAND SoftLinkAccessors FOR (SoftLink) this»
    «ELSEIF this.isCollectionType() || association != null»
        «EXPAND DoAssociationAccessors»
    «ELSE»
        «IF !isStatic»
            «EXPAND Getter»
            «IF isReadOnly() == false»
            «EXPAND Setter»
            «ENDIF»
        «ENDIF»
    «ENDIF»
    «EXPAND jeafgenerator::api::ClassExtensionHook::AfterClassPropertyAccessors(this.type.fqn())»
«ENDDEFINE»

// processing the properties
«DEFINE DoPropertyDeclaration FOR Property»
	«EXPAND functions::Javadoc::JavadocForProperty»
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
	«EXPAND RESTParamAnnotation»
	«EXPAND java::Jackson::JSONAlias»
	«EXPAND Validation::ValidationAnnotation»
    «IF generateValidationAnnotationsForAttributesFromMultiplicity() && isStatic == false && isTransient() == false && isMultivalued() == true && isStereotypeApplied("Size") == false && lower > 0»@«getEnterpriseJavaPackage()».validation.constraints.Size(min = «lower»)«ENDIF»
    «IF generateValidationAnnotationsForAttributesFromMultiplicity() && isStatic == false && isTransient() == false && isMultivalued() == false && type.isPrimitiveType() == false && this.requiresNotNullAnnotation() && lower > 0»@«getEnterpriseJavaPackage()».validation.constraints.NotNull«ENDIF»
	«visibility» «IF isStatic» static «ENDIF» «IF isReadOnly() && belongsToTransientBidirectionalBackReference() == false»final «ENDIF» «IF isTransient()»transient «ENDIF» «this.fqn()» «name»«IF this.isRealInitValue() && this.isMultivalued()== false && this.isStatic == true» = «this.initValue()»«ENDIF»;
«ENDDEFINE»

// processing the properties
«DEFINE SoftLinkPropertyDeclaration FOR SoftLink»
        «EXPAND functions::Javadoc::JavadocForProperty»
        «EXPAND java::Helper::GenerateDeprecationAnnotation-»
        «EXPAND RESTParamAnnotation»
        «EXPAND java::Jackson::JSONAlias»
        «EXPAND Validation::ValidationAnnotation»
        «IF isMultivalued()»
            «IF generateJacksonAnnotations() && isTransient() == false»
            @com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SKIP)
            «ENDIF»
            «IF generateValidationAnnotationsForAssociationsFromMultiplicity() && isStatic == false && isTransient() == false && isStereotypeApplied("Size") == false && lower > 0»@«getEnterpriseJavaPackage()».validation.constraints.Size(min = «lower»)«ENDIF»
            «IF generateValidationAnnotationsForAssociationsFromMultiplicity() && isStatic == false && isTransient() == false && this.requiresNotNullAnnotation() && lower > 0»@«getEnterpriseJavaPackage()».validation.constraints.NotNull«ENDIF»
            «visibility» «IF isReadOnly()»final «ENDIF» «IF isTransient()»transient «ENDIF» «this.getCollectionType()»<«this.getMultivaluedJavaSoftLinkType()»> «this.getSoftLinkPropertyName()»;
        «ELSE»
            «IF generateValidationAnnotationsForAssociationsFromMultiplicity() && isStatic == false && isTransient() == false && this.requiresNotNullAnnotation() && lower > 0»@«getEnterpriseJavaPackage()».validation.constraints.NotNull«ENDIF»
            «visibility» «IF isReadOnly()»final «ENDIF» «IF isTransient()»transient «ENDIF» «this.getJavaSoftLinkType()» «this.getSoftLinkPropertyName()»;
        «ENDIF»
«ENDDEFINE»

«DEFINE SoftLinkAccessors FOR SoftLink»
    «IF isNavigable()»
        «IF isMultivalued()»
            «EXPAND SoftLinkToManyAccessorMethods»
        «ELSE»
            «EXPAND SoftLinkToOneAccessorMethods»
        «ENDIF»
    «ENDIF»
«ENDDEFINE»



// processing the association properties
«DEFINE DoAssociationPropertyDeclaration FOR Property»
	«EXPAND functions::Javadoc::JavadocForProperty»
	«IF isNavigable()»
		«EXPAND java::Helper::GenerateDeprecationAnnotation-»
		«EXPAND RESTParamAnnotation»
		«EXPAND java::Jackson::JSONAlias»
		«EXPAND Validation::ValidationAnnotation»
		«IF isMultivalued()»
            «IF generateJacksonAnnotations() && isTransient() == false»
            @com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SKIP)
            «ENDIF»
			«IF generateValidationAnnotationsForAssociationsFromMultiplicity() && isStatic == false && isTransient() == false && isStereotypeApplied("Size") == false && lower > 0»@«getEnterpriseJavaPackage()».validation.constraints.Size(min = «lower»)«ENDIF»
			«IF generateValidationAnnotationsForAssociationsFromMultiplicity() && isStatic == false && isTransient() == false && this.requiresNotNullAnnotation() && lower > 0»@«getEnterpriseJavaPackage()».validation.constraints.NotNull«ENDIF»
			«visibility» «IF isReadOnly()»final «ENDIF» «IF isTransient()»transient «ENDIF» «this.fqn()» «asInstanceVar()»;
		«ELSE»
			«IF generateValidationAnnotationsForAssociationsFromMultiplicity() && isStatic == false && isTransient() == false && this.requiresNotNullAnnotation() && lower > 0»@«getEnterpriseJavaPackage()».validation.constraints.NotNull«ENDIF»
			«visibility» «IF isReadOnly() && belongsToTransientBidirectionalBackReference() == false»final «ENDIF» «IF isTransient()»transient «ENDIF» «type.fqn()» «asInstanceVar()»;
		«ENDIF»
		
		
		«REM» Special handling for bi-directional associations with one transient association end«ENDREM»
		«IF this.isTransientBidirectionalBackReference()»
		/**
		 * Attribute is required for correct handling of bidirectional associations in case of deserialization.
		 */
		private transient boolean «asInstanceVar()»BackReferenceInitialized;
		«ENDIF»
	«ENDIF»
«ENDDEFINE»


«DEFINE DoAssociationAccessors FOR Property»
	«IF isNavigable()»
		«IF isMultivalued()»
			«EXPAND ToManyAccessorMethods»
		«ELSE»
			«EXPAND ToOneAccessorMethods»
		«ENDIF»
	«ENDIF»
«ENDDEFINE»

// TODO Get and set method should be final for service objects. 
«DEFINE Getter FOR Property»
	«EXPAND functions::Javadoc::JavadocForPropertyGetter»
	«EXPAND java::Helper::GenerateDeprecationAnnotation-»
	«IF this.isDeprecated() == false && type.isPrimitiveType() && type.isBooleanType() && this.isMultivalued() == false-»
    @Deprecated
    «ENDIF-»	
	«IF this.isInternalProperty() == false»public«ENDIF» «this.fqn()» «asGetter()»() {
	    «IF this.generateBackwardCompatibility() == false»
		    «IF this.isMultivalued() == false»return «asInstanceVar()»;
		    «ELSE»
			    «this.fqn()» lReturnValue;
			    if(«asInstanceVar()» != null) {
			      «IF this.isBinaryType()»
				      «IF disableBinaryDataImmutability()»
					      lReturnValue = «asInstanceVar()»;
				      «ELSE»
					      lReturnValue = new «type.fqn()»[«asInstanceVar()».length];
					      System.arraycopy(«asInstanceVar()», 0, lReturnValue, 0, «asInstanceVar()».length);
				      «ENDIF»
			      «ELSE»
				      «IF disableArrayImmutability()»
					      lReturnValue = «asInstanceVar()»;
				      «ELSE»
					      lReturnValue = new «type.fqn()»[«asInstanceVar()».length];
					      System.arraycopy(«asInstanceVar()», 0, lReturnValue, 0, «asInstanceVar()».length);
				      «ENDIF»
			      «ENDIF»
			    }
			    else {
			      lReturnValue = null;
			    }
			    return lReturnValue;
			«ENDIF»
		«ELSE»
            «EXPAND java::Helper::CallGetterForSuccessor»
		«ENDIF»
    }
    «IF type.isPrimitiveType() && type.isBooleanType() && this.isMultivalued() == false» 
        «EXPAND functions::Javadoc::JavadocForPropertyGetter»
        «EXPAND java::Helper::GenerateDeprecationAnnotation-»
       «IF this.isInternalProperty() == false»public«ENDIF» boolean is«name.toFirstUpper()»() {
           «IF this.generateBackwardCompatibility() == false»
               return «name»;
           «ELSE»
	           «EXPAND java::Helper::CallGetterForSuccessor»
           «ENDIF»
       }
    «ENDIF»    
«ENDDEFINE»

«DEFINE AbstractGetterForDerivedProperty FOR Property»
    «EXPAND functions::Javadoc::JavadocForPropertyGetter»
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
    «IF generateJacksonAnnotations() && this.isAddToJSON()»@com.fasterxml.jackson.annotation.JsonGetter«ENDIF»
    «IF this.isInternalProperty() == false»public«ENDIF» abstract «IF this.association == null»«this.fqn()»«ELSE»«this.fqn()»«ENDIF» «asGetter()»();
    
    «IF generateJacksonAnnotations() && this.isAddToJSON() && this.isMultivalued()»
        @com.fasterxml.jackson.annotation.JsonSetter
        private void set«name.toFirstUpper()»(«this.fqn()» «asParameter()») {
          // Actively ignore passed objects as this is just a derived property. Unfortunately there is no more elegant variant to not run into problems during deserialization.
        }
    «ENDIF»
«ENDDEFINE»

«DEFINE EmptyGetterImplForDerivedProperty FOR Property»
    «EXPAND functions::Javadoc::JavadocForPropertyGetter»
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
    «IF generateJacksonAnnotations() && this.isAddToJSON()»@com.fasterxml.jackson.annotation.JsonGetter«ENDIF»
    @Override
    «IF this.isInternalProperty() == false»public«ENDIF» «IF this.association == null»«this.fqn()»«ELSE»«this.fqn()»«ENDIF» «asGetter()»() {
        // TODO Implement method for derived property "«this.name»".
        «IF this.type.isPrimitiveType() && this.isMultivalued() == false»
            «IF this.fqn() != "boolean"» return 0; «ELSE» return false;«ENDIF»
        «ELSE»
        return null;
        «ENDIF»
    }
«ENDDEFINE»

«DEFINE Setter FOR Property»
	«EXPAND functions::Javadoc::JavadocForPropertySetter»
	«EXPAND java::Helper::GenerateDeprecationAnnotation-»
	«IF this.isInternalProperty() == false»public«ENDIF» void «asSetter()»(«this.fqn()» «asParameter()») {
		«IF this.generateBackwardCompatibility() == false»
			// Assign value to attribute
			«IF this.isMultivalued() == false»
				«asInstanceVar()»=«asParameter()»;
			«ELSE»
			  if(«asParameter()» != null) {
		      «IF this.isBinaryType()»
			      «IF disableBinaryDataImmutability()»
				      «asInstanceVar()» = «asParameter()»;
			      «ELSE»
				      «asInstanceVar()» = new «type.fqn()»[«asParameter()».length];
				      System.arraycopy(«asParameter()», 0, «asInstanceVar()», 0, «asParameter()».length);
			      «ENDIF»
		      «ELSE»
			      «IF disableArrayImmutability()»
				      «asInstanceVar()» = «asParameter()»;
			      «ELSE»
				      «asInstanceVar()» = new «type.fqn()»[«asParameter()».length];
				      System.arraycopy(«asParameter()», 0, «asInstanceVar()», 0, «asParameter()».length);
			      «ENDIF»
		      «ENDIF»
			  }
			  else {
			      «asInstanceVar()» = null;
			  }
			«ENDIF»
		«ELSE»
            «EXPAND java::Helper::CallSetterForSuccessor»
		«ENDIF»
	}
«ENDDEFINE»

«DEFINE SoftLinkToOneAccessorMethods FOR SoftLink»
    «EXPAND functions::Javadoc::JavadocForPropertyGetter»
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
    public «this.getJavaSoftLinkType()» get«this.getSoftLinkPropertyName().toFirstUpper()» () {
    «IF ((NamedElement)this.owner).isPersistentObject()»
    «this.getSoftLinkPropertyName()» = this.unproxy(«asInstanceVar()»);«ENDIF»
        «IF this.isTransientBidirectionalBackReference()»
        // Due to restrictions in JSON serialization / deserialization bi-directional associations need a special handling after an object was deserialized.
        if («this.asInstanceVar()»BackReferenceInitialized == false) {
          «this.getSoftLinkPropertyName()»BackReferenceInitialized = true;
            «IF opposite.isMultivalued() == true»
            «this.asInstanceVar()».addTo«opposite.name.toFirstUpper()»((«opposite.type.name»)this);
            «ELSE»
            «this.asInstanceVar()».«opposite.asSetter()»((«opposite.type.name»)this);
            «ENDIF»
        }
        «ENDIF»
        return «this.getSoftLinkPropertyName()»;
    }
    
    «IF isReadOnly() == false»
    «EXPAND functions::Javadoc::JavadocForPropertySetter»
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
    public void set«this.getSoftLinkPropertyName().toFirstUpper()» («this.getJavaSoftLinkType()» «asParameter()») {
        «IF generateNullChecksForToOneAssociationsOfServiceObjects() && this.getJavaSoftLinkType() != "long"»
        // «asParameter()» must not be null. To unset an association the unset method has to be called.
        com.anaptecs.jeaf.xfun.api.checks.Check.checkInvalidParameterNull(«asParameter()», "«asParameter()»");
        «ENDIF»

        «this.getSoftLinkPropertyName()» = «asParameter()»;
    }
    
    «IF this.getJavaSoftLinkType() != "long"»
    «EXPAND functions::Javadoc::JavadocForPropertyUnset»
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
    public final void unset«this.getSoftLinkPropertyName().toFirstUpper()» () {
        «EXPAND GenerateRemoveOpposite»
        «IF opposite == null || opposite.isNavigable() == false»
          «this.getSoftLinkPropertyName()» = null;
        «ENDIF»
    }
    «ENDIF»
    «ENDIF»
«ENDDEFINE»

// Setter for associations
«DEFINE SoftLinkToManyAccessorMethods FOR SoftLink»
    «EXPAND functions::Javadoc::JavadocForPropertyGetter»
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
    public «this.getCollectionType()»<«this.getMultivaluedJavaSoftLinkType()»> get«this.getSoftLinkPropertyName().toFirstUpper()»() {
        «IF this.isTransientBidirectionalBackReference()»
        // Due to restrictions in JSON serialization / deserialization bi-directional associations need a special handling after an object was deserialized.
        if («this.asInstanceVar()»BackReferenceInitialized == false) {
          «this.asInstanceVar()»BackReferenceInitialized = true;
          for («this.type.fqn()» lNext : «this.asInstanceVar()») {
            «IF opposite.isMultivalued() == true»
            lNext.addTo«opposite.name.toFirstUpper()»((«opposite.type.name»)this);
            «ELSE»
            lNext.«opposite.asSetter()»((«opposite.type.name»)this);
            «ENDIF»
          }
        }
        «ENDIF»
        «IF disableCollectionImmutability()»
        // Return all «this.type.name» objects directly without any protection against modification.
        return «this.getSoftLinkPropertyName()»;
        «ELSE»
        // Return all «this.type.name» objects as unmodifiable collection.
        return java.util.Collections.unmodifiable«this.getCollectionTypeShort()»(«this.getSoftLinkPropertyName()»);
        «ENDIF»
    }
    
    «IF isReadOnly() == false»
    «IF generatePublicSettersForAssociations()»
    /**
     * Method sets the association {@link #«asInstanceVar()»} to the passed collection. All objects that formerly were part of the association will be removed from it.
     * 
     * @param «asParameter()» Collection with objects to which {@link #«asInstanceVar()»} should be set. The parameter may be null. In this case {@link #«asInstanceVar()»} is just unset.
     */
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
    public void set«this.getSoftLinkPropertyName().toFirstUpper()»(«this.getCollectionType()»<«this.getMultivaluedJavaSoftLinkType()»> «asParameter()») {
        // Check of parameter is not required.
        
        // Remove all objects from association "«this.getSoftLinkPropertyName()»".
        this.clear«this.getSoftLinkPropertyName().toFirstUpper()»();
        
        // If the association is null, removing all entries is sufficient.
        if(«asParameter()» != null) {
          «this.getSoftLinkPropertyName()» = new «this.getCollectionImplType()»<«type.fqn()»>(«asParameter()»);
        }
    }
    «ENDIF»

    «EXPAND functions::Javadoc::JavadocForPropertyAdd»
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
    public void addTo«this.getSoftLinkPropertyName().toFirstUpper()» («this.getMultivaluedJavaSoftLinkType()» «asParameter()») {
        «IF isTargetRuntimeJEAF()»
        // Check parameter "«asParameter()»" for invalid value null.
        com.anaptecs.jeaf.xfun.api.checks.Check.checkInvalidParameterNull(«asParameter()», "«asParameter()»");
        «ENDIF»
        
        «IF opposite != null && opposite.isNavigable() == true»
            «IF opposite.isMultivalued() == false»
                // Since this is not a many-to-many association the association to which the passed object belongs, has to 
                // be released.
                «asParameter()».«opposite.asUnset()»();
            «ENDIF»
        «ENDIF»
        
        // Add passed object to collection of associated «this.type.name» objects.
        «this.getSoftLinkPropertyName()».add(«asParameter()»);
        
        «EXPAND GenerateInitOpposite»
    }
    
  «EXPAND functions::Javadoc::JavadocForPropertyAddAll»
  «EXPAND java::Helper::GenerateDeprecationAnnotation-»
  public void addTo«this.getSoftLinkPropertyName().toFirstUpper()» (java.util.Collection<«this.getMultivaluedJavaSoftLinkType()»> «asParameter()») {
        «IF isTargetRuntimeJEAF()»
        // Check parameter "«asParameter()»" for invalid value null.
        com.anaptecs.jeaf.xfun.api.checks.Check.checkInvalidParameterNull(«asParameter()», "«asParameter()»");
        «ENDIF»
        
        // Add all passed objects.
        for («this.getMultivaluedJavaSoftLinkType()» lNextObject : «asParameter()») {
          this.addTo«this.getSoftLinkPropertyName().toFirstUpper()»(lNextObject);
        }
  }
  
    /**
     * Method removes the passed object from {@link #«asInstanceVar()»}.     
     * 
     * @param «asParameter()» Object that should be removed from {@link #«asInstanceVar()»}. The parameter must not be null.
     */
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
    public void removeFrom«this.getSoftLinkPropertyName().toFirstUpper()» («this.getMultivaluedJavaSoftLinkType()» «asParameter()») {
        «IF isTargetRuntimeJEAF()»
        // Check parameter for invalid value null.
        com.anaptecs.jeaf.xfun.api.checks.Check.checkInvalidParameterNull(«asParameter()», "«asParameter()»");
        «ENDIF»

        // Remove passed object from collection of associated «this.type.name» objects.
        «this.getSoftLinkPropertyName()».remove(«asParameter()»);
        
        «EXPAND GenerateRemoveOpposite»
    }
    
    /**
     * Method removes all objects from {@link #«asInstanceVar()»}.
     */
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
    public void clear«this.getSoftLinkPropertyName().toFirstUpper()» () {
      «IF opposite != null && opposite.isNavigable() == true»
      // Remove all objects from association "«asInstanceVar()»".
      java.util.Collection<«this.getMultivaluedJavaSoftLinkType()»> «asLocalVar()» = new java.util.HashSet<«this.getMultivaluedJavaSoftLinkType()»>(«asInstanceVar()»);
      java.util.Iterator<«this.getMultivaluedJavaSoftLinkType()»> lIterator = «asLocalVar()».iterator();
      while(lIterator.hasNext()) {
          // As association is bidirectional we have to clear it in both directions.
          this.removeFrom«this.getSoftLinkPropertyName().toFirstUpper()»(lIterator.next());
      }
      «ELSE»
      // Remove all objects from association "«asInstanceVar()»".
      «this.getSoftLinkPropertyName()».clear();
      «ENDIF»
    }
    «ENDIF»
    
«ENDDEFINE»

«DEFINE ToOneAccessorMethods FOR Property»
    «EXPAND functions::Javadoc::JavadocForPropertyGetter»
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
	«IF this.isInternalProperty() == false»public«ENDIF» «type.fqn()» «asGetter()» () {
    «IF ((NamedElement)this.owner).isPersistentObject()»
    «asInstanceVar()» = this.unproxy(«asInstanceVar()»);«ENDIF»
	    «IF this.generateBackwardCompatibility() == false»
		    «IF this.isTransientBidirectionalBackReference()»
		    // Due to restrictions in JSON serialization / deserialization bi-directional associations need a special handling after an object was deserialized.
		    if («this.asInstanceVar()»BackReferenceInitialized == false) {
		      «this.asInstanceVar()»BackReferenceInitialized = true;
		        «IF opposite.isMultivalued() == true»
		        «this.asInstanceVar()».addTo«opposite.name.toFirstUpper()»((«opposite.type.name»)this);
		        «ELSE»
			    «this.asInstanceVar()».«opposite.asSetter()»((«opposite.type.name»)this);
			    «ENDIF»
		    }
		    «ENDIF»
			return «asInstanceVar()»;
		«ELSE»
		    «EXPAND java::Helper::CallGetterForSuccessor»
		«ENDIF»
	}
	
    «IF isReadOnly() == false»
    «EXPAND functions::Javadoc::JavadocForPropertySetter»
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
	«IF this.isInternalProperty() == false && this.belongsToTransientBidirectionalBackReference() == false»public«ENDIF» void «asSetter()» («type.fqn()» «asParameter()») {
	    «IF this.generateBackwardCompatibility() == false»
			«IF generateNullChecksForToOneAssociationsOfServiceObjects()»
			// «asParameter()» must not be null. To unset an association the unset method has to be called.
			com.anaptecs.jeaf.xfun.api.checks.Check.checkInvalidParameterNull(«asParameter()», "«asParameter()»");
			«ENDIF»
		
			«IF opposite != null && opposite.isNavigable() == true»
				// Release already referenced object before setting a new association.
				if(«asInstanceVar()» != null) {
				«IF opposite.isMultivalued() == true»
					«asInstanceVar()».removeFrom«opposite.name.toFirstUpper()»( («opposite.type.fqn()») this);
				«ELSE»
					«asInstanceVar()».«opposite.asUnset()»();
				«ENDIF»
				}
			«ENDIF»
		
			«asInstanceVar()» = «asParameter()»;
		    «EXPAND GenerateInitOpposite»
		«ELSE»
		    «EXPAND java::Helper::CallSetterForSuccessor»
		«ENDIF»
	}
		
    «EXPAND functions::Javadoc::JavadocForPropertyUnset»
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
    «IF this.isInternalProperty() == false && this.belongsToTransientBidirectionalBackReference() == false»public«ENDIF» final void «asUnset()» () {
        «IF this.generateBackwardCompatibility() == false»
	        «EXPAND GenerateRemoveOpposite»
	        «IF opposite == null || opposite.isNavigable() == false || this.belongsToTransientBidirectionalBackReference()»
	          «asInstanceVar()» = null;
	        «ENDIF»
	    «ELSE»
	        «EXPAND java::Helper::CallUnsetForSuccessor»
	    «ENDIF»
    }
    «REM»Even though class is readonly it is still required to set transient back reference«ENDREM»
    «ELSEIF belongsToTransientBidirectionalBackReference()»
	    «EXPAND functions::Javadoc::JavadocForPropertySetter»
	    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
		void «asSetter()» («type.fqn()» «asParameter()») {
            «IF this.generateBackwardCompatibility() == false»			
				«IF generateNullChecksForToOneAssociationsOfServiceObjects()»
				// «asParameter()» must not be null. To unset an association the unset method has to be called.
				com.anaptecs.jeaf.xfun.api.checks.Check.checkInvalidParameterNull(«asParameter()», "«asParameter()»");
				«ENDIF»
		
				«asInstanceVar()» = «asParameter()»;
			«ELSE»
			    «EXPAND java::Helper::CallUnsetForSuccessor»
			«ENDIF»
		}
    «ENDIF»
«ENDDEFINE»

// Getter for associations
«DEFINE ToManyAccessorMethods FOR Property»
    «EXPAND functions::Javadoc::JavadocForPropertyGetter»
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
	«IF this.isInternalProperty() == false»public«ENDIF» «this.fqn()» «asGetter()» () {
	    «IF this.generateBackwardCompatibility() == false»
		    «IF this.isTransientBidirectionalBackReference()»
		    // Due to restrictions in JSON serialization / deserialization bi-directional associations need a special handling after an object was deserialized.
		    if («this.asInstanceVar()»BackReferenceInitialized == false) {
		      «this.asInstanceVar()»BackReferenceInitialized = true;
		      for («this.type.fqn()» lNext : «this.asInstanceVar()») {
		        «IF opposite.isMultivalued() == true»
		        lNext.addTo«opposite.name.toFirstUpper()»((«opposite.type.name»)this);
		        «ELSE»
			    lNext.«opposite.asSetter()»((«opposite.type.name»)this);
			    «ENDIF»
		      }
		    }
		    «ENDIF»
		    «IF disableCollectionImmutability()»
		    // Return all «this.type.name» objects directly without any protection against modification.
			return «asInstanceVar()»;
		    «ELSE»
		    // Return all «this.type.name» objects as unmodifiable collection.
			return java.util.Collections.unmodifiable«this.getCollectionTypeShort()»(«asInstanceVar()»);
			«ENDIF»
		«ELSE»
		    «EXPAND java::Helper::CallGetterForSuccessor»
		«ENDIF»
	}
	
    «IF isReadOnly() == false»
    «IF generatePublicSettersForAssociations()»
    «EXPAND functions::Javadoc::JavadocForPropertySetter»
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
    «IF this.isInternalProperty() == false && this.belongsToTransientBidirectionalBackReference() == false»public«ENDIF» void set«name.toFirstUpper()»(«this.fqn()» «asParameter()») {
        «IF this.generateBackwardCompatibility() == false»
	        // Check of parameter is not required.
	        
	        // Remove all objects from association "«asInstanceVar()»".
	        this.clear«name.toFirstUpper()»();
	        
	        // If the association is null, removing all entries is sufficient.
	        if(«asParameter()» != null) {
	          «asInstanceVar()» = new «this.getCollectionImplType()»<«type.fqn()»>(«asParameter()»);
	        }
	    «ELSE»
	        «EXPAND java::Helper::CallSetterForSuccessor»
	    «ENDIF»
    }
    «ENDIF»

    «EXPAND functions::Javadoc::JavadocForPropertyAdd»
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
	«IF this.isInternalProperty() == false && this.belongsToTransientBidirectionalBackReference() == false»public«ENDIF» void addTo«name.toFirstUpper()» («this.type.fqn()» «asParameter()») {
        «IF this.generateBackwardCompatibility() == false»
	        «IF isTargetRuntimeJEAF()»
	        // Check parameter "«asParameter()»" for invalid value null.
	        com.anaptecs.jeaf.xfun.api.checks.Check.checkInvalidParameterNull(«asParameter()», "«asParameter()»");
	        «ENDIF»
	        
		    «IF opposite != null && opposite.isNavigable() == true»
		        «IF opposite.isMultivalued() == false && this.belongsToTransientBidirectionalBackReference() == false»
		            // Since this is not a many-to-many association the association to which the passed object belongs, has to be released.
		            «asParameter()».«opposite.asUnset()»();
		        «ENDIF»
		    «ENDIF»
		    
			// Add passed object to collection of associated «this.type.name» objects.
			«asInstanceVar()».add(«asParameter()»);
			
	        «EXPAND GenerateInitOpposite»
	    «ELSE»
	        «EXPAND java::Helper::CallAddToForSuccessor»
	    «ENDIF»
	}
	
    «EXPAND functions::Javadoc::JavadocForPropertyAddAll»
    «EXPAND java::Helper::GenerateDeprecationAnnotation-»
    «IF this.isInternalProperty() == false && this.belongsToTransientBidirectionalBackReference() == false»public«ENDIF» void addTo«name.toFirstUpper()» (java.util.Collection<«this.type.fqn()»> «asParameter()») {
        «IF isTargetRuntimeJEAF()»
        // Check parameter "«asParameter()»" for invalid value null.
        com.anaptecs.jeaf.xfun.api.checks.Check.checkInvalidParameterNull(«asParameter()», "«asParameter()»");
        «ENDIF»
        
        // Add all passed objects.
        for («this.type.fqn()» lNextObject : «asParameter()») {
          this.addTo«name.toFirstUpper()»(lNextObject);
        }
    }
  
    /**
     * Method removes the passed object from {@link #«asInstanceVar()»}.
* * @param «asParameter()» Object that should be removed from {@link #«asInstanceVar()»}. The parameter must not be null. */ «EXPAND java::Helper::GenerateDeprecationAnnotation-» «IF this.isInternalProperty() == false && this.belongsToTransientBidirectionalBackReference() == false»public«ENDIF» void removeFrom«name.toFirstUpper()» («type.fqn()» «asParameter()») { «IF this.generateBackwardCompatibility() == false» «IF isTargetRuntimeJEAF()» // Check parameter for invalid value null. com.anaptecs.jeaf.xfun.api.checks.Check.checkInvalidParameterNull(«asParameter()», "«asParameter()»"); «ENDIF» // Remove passed object from collection of associated «this.type.name» objects. «asInstanceVar()».remove(«asParameter()»); «EXPAND GenerateRemoveOpposite» «ELSE» «EXPAND java::Helper::CallRemoveFromForSuccessor» «ENDIF» } /** * Method removes all objects from {@link #«asInstanceVar()»}. */ «EXPAND java::Helper::GenerateDeprecationAnnotation-» «IF this.isInternalProperty() == false && this.belongsToTransientBidirectionalBackReference() == false»public«ENDIF» void clear«name.toFirstUpper()» () { «IF this.generateBackwardCompatibility() == false» «IF opposite != null && opposite.isNavigable() == true» // Remove all objects from association "«asInstanceVar()»". java.util.Collection<«type.fqn()»> «asLocalVar()» = new java.util.HashSet<«type.fqn()»>(«asInstanceVar()»); java.util.Iterator<«type.fqn()»> lIterator = «asLocalVar()».iterator(); while(lIterator.hasNext()) { // As association is bidirectional we have to clear it in both directions. this.removeFrom«name.toFirstUpper()»(lIterator.next()); } «ELSE» // Remove all objects from association "«asInstanceVar()»". «asInstanceVar()».clear(); «ENDIF» «ELSE» «EXPAND java::Helper::CallClearForSuccessor» «ENDIF» } «REM»Even though class is readonly it is still required to set transient back reference«ENDREM» «ELSEIF belongsToTransientBidirectionalBackReference()» «EXPAND functions::Javadoc::JavadocForPropertyAdd» «EXPAND java::Helper::GenerateDeprecationAnnotation-» void addTo«name.toFirstUpper()» («this.type.fqn()» «asParameter()») { «IF isTargetRuntimeJEAF()» // Check parameter "«asParameter()»" for invalid value null. com.anaptecs.jeaf.xfun.api.checks.Check.checkInvalidParameterNull(«asParameter()», "«asParameter()»"); «ENDIF» // Add passed object to collection of associated «this.type.name» objects. «asInstanceVar()».add(«asParameter()»); } «ENDIF» «ENDDEFINE» // Template generates the code that will be generated if the association is bidirectional. «DEFINE GenerateInitOpposite FOR Property» «IF opposite != null && opposite.isNavigable() == true && this.belongsToTransientBidirectionalBackReference() == false» «IF opposite.isMultivalued() == true» // The association is set in both directions because within the UML model it is defined to be bidirectional. // In case that one side will be removed from the association the other side will also be removed. if («IF generateNullChecksForToOneAssociationsOfServiceObjects() == false» «asParameter()» != null && «ENDIF»«asParameter()».get«opposite.name.toFirstUpper()»().contains(this) == false ) { «asParameter()».addTo«opposite.name.toFirstUpper()»( («opposite.type.fqn()») this); } «ELSE» // The association is set in both directions because within the UML model it is defined to be bidirectional. // In case that one side will be removed from the association the other side will also be removed. if(«IF generateNullChecksForToOneAssociationsOfServiceObjects() == false» «asParameter()» != null && «ENDIF»this.equals(«asParameter()».get«opposite.name.toFirstUpper()»()) == false) { «asParameter()».«opposite.asSetter()»( («opposite.type.fqn()») this); } «ENDIF» «ENDIF» «ENDDEFINE» «DEFINE GenerateRemoveOpposite FOR Property» «IF opposite != null && opposite.isNavigable() == true && this.belongsToTransientBidirectionalBackReference() == false» // The association is set in both directions because within the UML model it is defined to be bidirectional. // In case that one side will be removed from the association the other side will also be removed. «IF isMultivalued() == true» «IF opposite.isMultivalued() == true» if («asParameter()».get«opposite.name.toFirstUpper()»().contains(this) == true ) { «asParameter()».removeFrom«opposite.name.toFirstUpper()»( («opposite.type.fqn()») this); } «ELSE» if(this.equals(«asParameter()».get«opposite.name.toFirstUpper()»()) == true) { «asParameter()».«opposite.asUnset()»(); } «ENDIF» «ELSE» «IF opposite != null && opposite.isNavigable() == true && this.isMultivalued() == false» «type.fqn()» «type.asLocalVar()» = «asInstanceVar()»; «ENDIF» «asInstanceVar()» = null; «IF opposite.isMultivalued() == true» if («type.asLocalVar()» != null && «type.asLocalVar()».get«opposite.name.toFirstUpper()»().contains(this) == true ) { «type.asLocalVar()».removeFrom«opposite.name.toFirstUpper()»( («opposite.type.fqn()») this); } «ELSE» if(«type.asLocalVar()» != null && this.equals(«type.asLocalVar()».get«opposite.name.toFirstUpper()»()) == true) { «type.asLocalVar()».«opposite.asUnset()»(); } «ENDIF» «ENDIF» «ENDIF» «ENDDEFINE» //copies the attributes from the businessobject to the transferobject «DEFINE CopyAttributeToTransfer FOR Property»«IF !isReadOnly()»lTransferObject.«asSetter()»(this.«asGetter()»());«ENDIF»«ENDDEFINE» «DEFINE CopyAttributeToBusiness FOR Property»«IF !isReadOnly()»lPersistentObject.«asSetter()»(this.«asGetter()»());«ENDIF»«ENDDEFINE» «DEFINE RESTParamAnnotation FOR Property» «IF generateJAXRSAnnotations() == true -» «IF this.isStereotypeApplied("PathParam") -» @«getEnterpriseJavaPackage()».ws.rs.PathParam("«EXPAND java::OpenAPI::RESTParamName FOR this»") «ENDIF-» «IF this.isStereotypeApplied("HeaderParam") -» @«getEnterpriseJavaPackage()».ws.rs.HeaderParam("«EXPAND java::OpenAPI::RESTParamName FOR this»") «ENDIF-» «IF this.isStereotypeApplied("QueryParam") -» @«getEnterpriseJavaPackage()».ws.rs.QueryParam("«EXPAND java::OpenAPI::RESTParamName FOR this»") «ENDIF-» «IF this.isStereotypeApplied("CookieParam") -» @«getEnterpriseJavaPackage()».ws.rs.CookieParam("«EXPAND java::OpenAPI::RESTParamName FOR this»") «ENDIF-» «IF this.isStereotypeApplied("BeanParam") -» @«getEnterpriseJavaPackage()».ws.rs.BeanParam «ENDIF-» «IF this.type.isStereotypeApplied("BeanParam") -» @«getEnterpriseJavaPackage()».ws.rs.BeanParam «ENDIF-» «ENDIF-» «ENDDEFINE»




© 2015 - 2024 Weber Informatics LLC | Privacy Policy