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

java.Helper.xpt Maven / Gradle / Ivy

There is a newer version: 1.24.1
Show newest version
«EXTENSION java::GeneratorCommons»
«EXTENSION java::Naming»
«EXTENSION java::Helper»
«EXTENSION java::OpenAPIFunctions»
«EXTENSION functions::Class»
«EXTENSION functions::Property»
«EXTENSION functions::SoftLink»
«EXTENSION functions::JEAFDeprecated»


«DEFINE GenerateToStringMethod FOR uml::Class»
  «IF this.isCompositeDataType() || this.superClass.isEmpty == true || this.getToStringProperties().select(e|e.isPropertySuppressed() == false).isEmpty == false»
  /**
   * Method returns a StringBuilder that can be used to create a String representation of this object. The returned StringBuilder also takes care about attributes of super classes.
   *
   * @return {@link StringBuilder} StringBuilder representing this object. The method never returns null.
   */
  «IF this.superClass.isEmpty == false»
  @Override
  «ENDIF»
  public StringBuilder toStringBuilder( String pIndent) {
    «IF this.isCompositeDataType()»
        StringBuilder lBuilder = new StringBuilder();
        lBuilder.append(pIndent);
	    lBuilder.append(this.getClass().getName());
	    lBuilder.append(System.lineSeparator());
	    lBuilder.append(pIndent);
	    lBuilder.append("«this.getCompositeDateTypePublicFieldName()»: ");
	    lBuilder.append(«this.getCompositeDateTypePublicFieldName()»);
	    lBuilder.append(System.lineSeparator());
    «ELSE»
	    «IF this.superClass.isEmpty == true»
            StringBuilder lBuilder = new StringBuilder();
            lBuilder.append(pIndent);
		    lBuilder.append(this.getClass().getName());
		    lBuilder.append(System.lineSeparator());
	    «ELSE»
		    StringBuilder lBuilder = super.toStringBuilder(pIndent);
	    «ENDIF»
	    «FOREACH this.getToStringProperties().select(e|e.isPropertySuppressed() == false && e.isStatic == false && e.belongsToTransientBidirectionalBackReference() == false && e.generateBackwardCompatibility() == false) AS attribute»
			lBuilder.append(pIndent);
			lBuilder.append("«attribute.name»: ");
		    «EXPAND ToStringValue FOR attribute»
	    «ENDFOREACH»
    «ENDIF»
    return lBuilder;
  }
  
  /**
   * Method creates a new String with the values of all attributes of this class. All references to other objects will be ignored.
   * 
   * @return {@link String} String representation of this object. The method never returns null.
   */
  @Override
  public String toString( ) {
    return this.toStringBuilder("").toString();
  }
  «ENDIF»
«ENDDEFINE»

«DEFINE ToStringValue FOR uml::Property»
    «LET this.getSoftLinkAwarePropertyNameForJava() AS propertyName»
    «IF association == null »
	    «IF isMultivalued() == false»
		    lBuilder.append(«propertyName»);
	    «ELSE»
		    if(«propertyName» != null) {
		    	lBuilder.append(java.util.Arrays.toString(«propertyName»));
		    }
		    else {
		    	lBuilder.append(" null");
		    }
	    «ENDIF»
	    lBuilder.append(System.lineSeparator());
    «ELSE»
	    «IF isMultivalued() == false»
		    «IF type.isEnumeration() == false && this.isSoftLink() == false && (type.isPOJO() || type.isServiceObject())»
		    if(«propertyName» != null) {
		    	lBuilder.append(System.lineSeparator());
		    	lBuilder.append(«propertyName».toStringBuilder(pIndent + "    "));
		    }
		    else {
		    	lBuilder.append(" null");
		    	lBuilder.append(System.lineSeparator());
		    }
		    «ELSE»
		    lBuilder.append(«propertyName»);
		    lBuilder.append(System.lineSeparator());
		    «ENDIF»
	    «ELSE»
		    if («propertyName» != null) {
		      lBuilder.append(«propertyName».size());
		      lBuilder.append(" element(s)");
		    }
		    else {
		      lBuilder.append(" null");
		    }
		    lBuilder.append(System.lineSeparator());
		    if («propertyName» != null) {
		      «IF this.isSoftLink()»
		      «LET ((JMM::SoftLink) this) AS softLink»
              for («softLink.getMultivaluedJavaSoftLinkType()» lNext : «propertyName») {
                lBuilder.append(pIndent + "    ");
                lBuilder.append(lNext.toString());
                lBuilder.append(System.lineSeparator());
              }
              «ENDLET»
		      «ELSE»
		      for («type.fqn()» lNext : «propertyName») {
		      	«IF type.isEnumeration() == false && (type.isStereotypeApplied("POJO") || type.isStereotypeApplied("ServiceObject"))»
		        lBuilder.append(lNext.toStringBuilder(pIndent + "    "));
		        «ELSE»
		        lBuilder.append(pIndent + "    ");
		        lBuilder.append(lNext.toString());
		        «ENDIF»
		        lBuilder.append(System.lineSeparator());
		      }
		      «ENDIF»
		    }
	    «ENDIF»
    «ENDIF»
    «ENDLET»
«ENDDEFINE»


«DEFINE GenerateDeprecationAnnotation FOR uml::NamedElement»
	«IF this.isDeprecated()-»
	@Deprecated
	«ENDIF-»
«ENDDEFINE»

«DEFINE GenerateConstantsForAttributeNames FOR uml::Class»
	«IF generateConstantsForAttributeNames() == true»
		«IF this.isCompositeDataType()»
				/**
				 * Constant for the name of attribute "«this.getCompositeDateTypePublicFieldName()»".
				 */
				public static final String «this.getCompositeDateTypePublicFieldName().toUpperCase()» = "«this.getCompositeDateTypePublicFieldName()»";
		«ELSE»
			«FOREACH this.ownedAttribute.select(e|e.isPropertySuppressed() == false) AS attr»
				«IF attr.isStatic == false»        
				/**
				 * Constant for the name of attribute "«attr.name»".
				 */
				«EXPAND java::Helper::GenerateDeprecationAnnotation FOR attr-»
				public static final String «attr.asInstanceVar().toUpperCase()» = "«attr.asInstanceVar()»";
				«ENDIF»
			«ENDFOREACH»
		«ENDIF»
	«ENDIF»
«ENDDEFINE»

«DEFINE GenerateGeneratedAnnotation FOR uml::NamedElement»
  «IF addGeneratedAnnotation()»
     @«getEnterpriseJavaPackage()».annotation.Generated(«getGeneratedAnnotation()»)
  «ENDIF»
«ENDDEFINE»

«DEFINE GenerateSuppressWarningsAnnotation FOR uml::NamedElement»
  «IF suppressAllWarnings()»
     @java.lang.SuppressWarnings("all")
  «ENDIF»
  «IF getSuppressedWarnings().isEmpty == false»
  @java.lang.SuppressWarnings(«FOREACH getSuppressedWarnings() AS warning SEPARATOR ", "»"«warning»"«ENDFOREACH»)
  «ENDIF»
«ENDDEFINE»

«DEFINE GenerateEqualsHashCode(String className) FOR uml::Class»
	«IF this.isCompositeDataType() && (generateEqualsAndHashCode() || generateEqualsAndHashCodeForCompositeDataTypes())»
		@Override
		public int hashCode( ) {
		  return java.util.Objects.hash(«this.getCompositeDateTypePublicFieldName()»);
		}
		
		@Override
		public boolean equals( Object pOtherObject ) {
		  boolean lEquals;
		  if (this == pOtherObject) {
		    lEquals = true;
		  }
		  else if (pOtherObject instanceof «this.fqn()» == false) {
		    lEquals = false;
		  }
		  else {
		    lEquals = java.util.Objects.equals(«this.getCompositeDateTypePublicFieldName()», ((«this.fqn()») pOtherObject).get«this.getCompositeDateTypePublicFieldName().toFirstUpper()»());
		  }
		  return lEquals;
		}
	«ELSEIF this.isOpenAPIDataType() && this.getAllAttributesFromHierarchy().select(e|e.isPropertySuppressed() == false && e.isStatic == false).size == 1 && this.getAllAttributesFromHierarchy().select(e|e.isPropertySuppressed() == false && e.isStatic == false).first().isMultivalued() == false && (generateEqualsAndHashCode() || generateEqualsAndHashCodeForOpenAPIDataTypes())»
		@Override
		public int hashCode( ) {
		  return java.util.Objects.hash(«this.getAllAttributesFromHierarchy().select(e|e.isPropertySuppressed() == false && e.isStatic == false).first().name»);
		}
		
		@Override
		public boolean equals( Object pOtherObject ) {
		  boolean lEquals;
		  if (this == pOtherObject) {
		    lEquals = true;
		  }
		  else if (pOtherObject instanceof «this.fqn()» == false) {
		    lEquals = false;
		  }
		  else {
		    lEquals = java.util.Objects.equals(«this.getAllAttributesFromHierarchy().select(e|e.isPropertySuppressed() == false && e.isStatic == false).first().name», ((«this.fqn()») pOtherObject).«this.getAllAttributesFromHierarchy().select(e|e.isPropertySuppressed() == false && e.isStatic == false).first().asGetter()»());
		  }
		  return lEquals;
		}
	«ELSEIF generateEqualsAndHashCode() || generateEqualsAndHashCodeForStandardClasses()»
	   «EXPAND GenerateEqualsAndHashCode(className)»
	«ENDIF»
«ENDDEFINE»

«DEFINE GenerateCustomHeadersField FOR uml::Class»
	«IF this.hasCustomHeaders()»
		/**
		 * Map contains all custom headers that were set on the object.
		 */
		private java.util.Map customHeaders = new java.util.HashMap();
	«ENDIF»
«ENDDEFINE»

«DEFINE GenerateCustomHeadersOperations FOR uml::Class»
	«IF this.hasCustomHeaders()»
	  /**
	   * Method returns map with all custom headers that were added
	   * 
	   * @return {@link Map} Map with all custom headers. The method never returns null. The returned map is unmodifiable.
	   */
	  public java.util.Map getCustomHeaders( ) {
	    return java.util.Collections.unmodifiableMap(customHeaders);
	  }
	  
	  /**
	   * Method adds the passed values as custom headers. The passed name and value of the http header must be compliant
	   * with guidelines about http headers.
	   * 
	   * @param pHeaderName Name of the HTTP header. The parameter must not be null,
	   * @param pHeaderValue Value of the http header the parameter may be null.
	   */
	  public void addCustomHeader( String pHeaderName, String pHeaderValue ) {
	    if (pHeaderName != null) {
	      customHeaders.put(pHeaderName, pHeaderValue);
	    }
	    else {
	      throw new IllegalArgumentException("Parameter 'pHeaderName' must not be null.");
	    }
	  }
	«ENDIF»
«ENDDEFINE»

«DEFINE GenerateValueOfForOpenAPIDataType FOR uml::Class»
	«IF generateValueOfForOpenAPIDataTypes() && this.isOpenAPIDataType()»
		«IF this.isCompositeDataType() == false»				
			«LET this.ownedAttribute.select(e|e.isStatic == false).first() AS theAttribute»
			«LET "p" + theAttribute.name.toFirstUpper() AS theParam»
				/**
				 * Method converts the passed {@link String} into an instance of this object.
				 *
				 * Please be aware that this method is only intended to be used for deserialization frameworks like JAX-RS. For "normal" object creation builder should be used instead.
				 * 
				 * @param «theParam» String that should be used to create an instance of this class. The parameter must not be null.
				 * @return {@link «name»} Instance of the class that matches to the passed string. The method never returns null.
				 */
				public static «name» valueOf(String «theParam») {
					return builder().set«theAttribute.name.toFirstUpper()»(
					«IF theAttribute.type.isPrimitiveType()»
						«IF theAttribute.type.isIntegerType()»
						Integer.parseInt(«theParam»)
						«ELSE»«IF theAttribute.type.isCharatcerType()»
						«theParam».charAt(0)
						«ELSE»
						«theAttribute.type.fqn().toFirstUpper()».parse«theAttribute.type.fqn().toFirstUpper()»(«theParam»)							
						«ENDIF»«ENDIF» 
					«ELSE»
						«IF theAttribute.type.isBigDecimal() || theAttribute.type.isBigInteger()»
							new «theAttribute.type.fqn()»(«theParam»)
						«ELSE»«IF theAttribute.type.isCharacterType()»
							Character.valueOf(«theParam».charAt(0))
						«ELSE» 
							«theAttribute.type.fqn()».valueOf(«theParam»)
						«ENDIF»«ENDIF»
					«ENDIF»
					)
					.build();
				}
			«ENDLET»«ENDLET»
		«ELSE»
			«LET "p" + this.getCompositeDateTypePublicFieldName().toFirstUpper() AS theParam»
				/**
				 * Method converts the passed {@link String} into an instance of this object.
				 *
				 * Please be aware that this method is only intended to be used for deserialization frameworks like JAX-RS. For "normal" object creation builder should be used instead.
				 * 
				 * @param «theParam» String that should be used to create an instance of this class. The parameter must not be null.
				 * @return {@link «name»} Instance of the class that matches to the passed string. The method never returns null.
				 */
				public static «name» valueOf(String «theParam») {
					return builder().set«this.getCompositeDateTypePublicFieldName().toFirstUpper()»(«theParam»).build();
				}
			«ENDLET»
		«ENDIF»
	«ENDIF»
«ENDDEFINE»

«DEFINE GenerateOfForClass FOR uml::Class»
    «IF this.generateOfOperationForClass() && this.isCompositeDataType() == false && isAbstract == false && getTemplateParams().length == 0»
	  /**
	   * Convenience method to create new instance of class «name».
	   * 
       * «FOREACH this.getAllAttributesForOfOperation() AS attr»
       *    @param «attr.asParameter()» Value to which {@link #«attr.name»} should be set. 
       * «ENDFOREACH»
	   * @return {@link «this.fqn()»}
	   */
	   public static «name» of(
		   «FOREACH this.getAllAttributesForOfOperation() AS attr SEPARATOR ", "»
			   «IF attr.isSoftLink()»
			     «IF attr.isMultivalued()»
			         «attr.getCollectionType()»<«((JMM::SoftLink)attr).getMultivaluedJavaSoftLinkType()»>
			     «ELSE»
			         «((JMM::SoftLink)attr).getJavaSoftLinkType()»
			     «ENDIF»
			   «ELSEIF attr.association != null»
				   «IF attr.isMultivalued()»
				   «attr.fqn()»
				   «ELSE»
				   «attr.type.fqn()»
				   «ENDIF»
			   «ELSE»
			       «attr.fqn()»
			   «ENDIF»
			   «IF attr.isSoftLink()»
			       «attr.getSoftLinkPropertyName().asParameter()»
			   «ELSE»
			       «attr.asParameter()»
			   «ENDIF»
		   «ENDFOREACH») {
	
		    «name».Builder lBuilder = «name».builder();
           «FOREACH this.getAllAttributesForOfOperation() AS attr»
               «IF attr.isSoftLink()»
                   lBuilder.set«attr.getSoftLinkPropertyName().toFirstUpper()»(«attr.getSoftLinkPropertyName().asParameter()»);
               «ELSE»
                   lBuilder.«attr.asSetter()»(«attr.asParameter()»);
               «ENDIF»
           «ENDFOREACH»
		    return lBuilder.build();
	  }
    «ENDIF»
«ENDDEFINE»

«DEFINE GenerateEqualsAndHashCode(String className) FOR uml::Class»
  «REM»equals() and hashCode() can only be generated in case of non bi-directional assocations«ENDREM»
  «IF this.hasBidirectionalAssociations() == false || this.hasOnlyTransientBidirectionalAssociations()»
	  @Override
	  public int hashCode( ) {
	    «IF ownedAttribute.select(e|e.isPropertySuppressed() == false && e.isTransient() == false && e.isStatic == false && e.generateBackwardCompatibility() == false).isEmpty == false»
		    final int lPrime = 31;
		    «IF parents().isEmpty»
		    int lResult = 1;
		    «ELSE»
		    int lResult = super.hashCode();
		    «ENDIF»
		    
		    «FOREACH ownedAttribute.select(e|e.isPropertySuppressed() == false && e.isTransient() == false && e.isStatic == false && e.generateBackwardCompatibility() == false) AS property»
		        «IF property.type.isPrimitiveType() && property.isMultivalued() == false»
		            «IF property.type.isBooleanType()»
		                lResult = lPrime * lResult + Boolean.hashCode(«property.name»);
		            «ELSEIF property.type.isLongType()»
		                lResult = lPrime * lResult + Long.hashCode(«property.name»);
		            «ELSEIF property.type.isFloatType()»
		                lResult = lPrime * lResult + Float.hashCode(«property.name»);
		            «ELSEIF property.type.isDoubleType()»
		                lResult = lPrime * lResult + Double.hashCode(«property.name»);
		            «ELSE»
		                lResult = lPrime * lResult + «property.name»;
		            «ENDIF»
		        «REM»Handle arrays«ENDREM»
		        «ELSEIF property.isMultivalued() && property.association == null»
		            lResult = lPrime * lResult + java.util.Arrays.hashCode(«property.name»);
		        «ELSE»
		            «IF property.isSoftLink()»
		                lResult = lPrime * lResult + java.util.Objects.hashCode(«property.getSoftLinkPropertyName()»);
		            «ELSE»
		                lResult = lPrime * lResult + java.util.Objects.hashCode(«property.name»);
		            «ENDIF»
		        «ENDIF»
		    «ENDFOREACH»
	        «IF this.hasCustomHeaders()»
	          lResult = lPrime * lResult + java.util.Objects.hashCode(customHeaders);
	        «ENDIF»
		    
		    return lResult;
	    «ELSE»
	        «IF parents().isEmpty»
	        return 1;
	        «ELSE»
	        return super.hashCode();
	        «ENDIF»
	    «ENDIF»
	  }
	
	  @Override
	  public boolean equals( Object pObject ) {
	    boolean lEquals;
	    if (this == pObject) {
	      lEquals = true;
	    }
	    else if (pObject == null) {
	      lEquals = false;
	    }
	    «IF parents().isEmpty == false»
        else if (!super.equals(pObject)) {
          lEquals = false;
        }
	    «ENDIF»
        else if (this.getClass() != pObject.getClass()) {
          lEquals = false;
        }
	    else {
	      «IF ownedAttribute.select(e|e.isPropertySuppressed() == false && e.isTransient() == false && e.isStatic == false && e.generateBackwardCompatibility() == false).isEmpty == false»
	          «className»«IF this.hasTemplateParameter()»«ENDIF» lOther = («className»«IF this.hasTemplateParameter()»«ENDIF») pObject;
		      lEquals =
		      «FOREACH ownedAttribute.select(e|e.isPropertySuppressed() == false && e.isTransient() == false && e.isStatic == false && e.generateBackwardCompatibility() == false) AS property SEPARATOR " && "»
		        «IF property.type.isPrimitiveType() && property.isMultivalued() == false»
                    «IF property.type.isDoubleType()»
                      Double.compare(«property.name», lOther.«property.name») == 0
                    «ELSEIF property.type.isFloatType()»
                      Float.compare(«property.name», lOther.«property.name») == 0
                    «ELSE»
		              «property.name» == lOther.«property.name»
		            «ENDIF»
		        «ELSEIF property.isMultivalued() && property.association == null»
		            java.util.Arrays.equals(«property.name», lOther.«property.name»)
		        «ELSE»
	                «IF property.isSoftLink()»
	                   java.util.Objects.equals(«property.getSoftLinkPropertyName()», lOther.«property.getSoftLinkPropertyName()»)
	                «ELSE»
	                   java.util.Objects.equals(«property.name», lOther.«property.name»)
	                «ENDIF»
		        «ENDIF»
		      «ENDFOREACH»
		      «IF this.hasCustomHeaders()»
		          && java.util.Objects.equals(customHeaders, lOther.customHeaders)
		      «ENDIF»
	          ;
	      «ELSE»
	          lEquals = true;
	      «ENDIF»
	    }
	    return lEquals;
	  }
  «ENDIF»
«ENDDEFINE»

«DEFINE CallSetterForSuccessor FOR uml::Property»
	// Delegate call to «this.getSuccessorAsProperty().asSetter()»(...)
	«IF this.getSuccessorAsProperty().type == this.type»
		this.«this.getSuccessorAsProperty().asSetter()»(«asParameter()»);
	«ELSE»
	   // TODO: ERROR: Type of deprecated property '«name»' and successor property '«this.getSuccessorAsProperty().name»' are not the same
	«ENDIF»
«ENDDEFINE»

«DEFINE CallAddToForSuccessor FOR uml::Property»
    // Delegate call to addTo«this.getSuccessorAsProperty().name.toFirstUpper()»(...)
    «IF this.getSuccessorAsProperty().type == this.type»
        this.addTo«this.getSuccessorAsProperty().name.toFirstUpper()»(«asParameter()»);
    «ELSE»
       // TODO: ERROR: Type of deprecated property '«name»' and successor property '«this.getSuccessorAsProperty().name»' are not the same
    «ENDIF»
«ENDDEFINE»

«DEFINE CallRemoveFromForSuccessor FOR uml::Property»
    // Delegate call to removeFrom«this.getSuccessorAsProperty().name.toFirstUpper()»(...)
    «IF this.getSuccessorAsProperty().type == this.type»
        this.removeFrom«this.getSuccessorAsProperty().name.toFirstUpper()»(«asParameter()»);
    «ELSE»
       // TODO: ERROR: Type of deprecated property '«name»' and successor property '«this.getSuccessorAsProperty().name»' are not the same
    «ENDIF»
«ENDDEFINE»

«DEFINE CallClearForSuccessor FOR uml::Property»
    // Delegate call to clear«this.getSuccessorAsProperty().name.toFirstUpper()»()
    «IF this.getSuccessorAsProperty().type == this.type»
        this.clear«this.getSuccessorAsProperty().name.toFirstUpper()»();
    «ELSE»
       // TODO: ERROR: Type of deprecated property '«name»' and successor property '«this.getSuccessorAsProperty().name»' are not the same
    «ENDIF»
«ENDDEFINE»

«DEFINE CallUnsetForSuccessor FOR uml::Property»
    // Delegate call to unset«this.getSuccessorAsProperty().name.toFirstUpper()»()
    «IF this.getSuccessorAsProperty().type == this.type»
        this.unset«this.getSuccessorAsProperty().name.toFirstUpper()»();
    «ELSE»
       // TODO: ERROR: Type of deprecated property '«name»' and successor property '«this.getSuccessorAsProperty().name»' are not the same
    «ENDIF»
«ENDDEFINE»

«DEFINE CallGetterForSuccessor FOR uml::Property»
    // Delegate call to «this.getSuccessorAsProperty().asGetter()»(...)
	«IF this.getSuccessorAsProperty().type == this.type»
		return this.«this.getSuccessorAsProperty().asGetter()»();
    «ELSE»
       // TODO: ERROR: Type of deprecated property '«name»' and successor property '«this.getSuccessorAsProperty().name»' are not the same
	«ENDIF»
«ENDDEFINE»




© 2015 - 2024 Weber Informatics LLC | Privacy Policy