blob: afa0d498ada54f54e169b77ee63a60d67b1b7278 [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.
*#
#parse ( "common.vm" )
#
#set ( $package = "${packageModelV3}" )
#
#set ( $root = $model.getClass( $model.getRoot($version), $version ) )
#
#foreach ( $class in $model.allClasses )
#set ( $ancestors = $Helper.ancestors( $class ) )
#set ( $allFields = [] )
#set ( $inheritedFields = [] )
#foreach ( $cl in $ancestors )
#if ( $cl != $class )
#set ( $dummy = $inheritedFields.addAll( $cl.allFields ) )
#end
#set ( $dummy = $allFields.addAll( $cl.allFields ) )
#end
#set ( $className = "${class.name}" )
#MODELLO-VELOCITY#SAVE-OUTPUT-TO ${package.replace('.','/')}/WrapperList.java
#parse ( "java/WrapperList.java" )
#MODELLO-VELOCITY#SAVE-OUTPUT-TO ${package.replace('.','/')}/WrapperProperties.java
#parse ( "java/WrapperProperties.java" )
#MODELLO-VELOCITY#SAVE-OUTPUT-TO ${package.replace('.','/')}/${className}.java
#if ( $class.name != "InputLocation" && $class.name != "InputSource" )
#set ( $types = { } )
#set ( $imports = $class.getClass().forName("java.util.TreeSet").newInstance() )
#set ( $dummy = $imports.add( "java.io.Serializable" ) )
#set ( $dummy = $imports.add( "java.util.AbstractList" ) )
#set ( $dummy = $imports.add( "java.util.Collections" ) )
#set ( $dummy = $imports.add( "java.util.HashMap" ) )
#set ( $dummy = $imports.add( "java.util.List" ) )
#set ( $dummy = $imports.add( "java.util.Map" ) )
#set ( $dummy = $imports.add( "java.util.Objects" ) )
#set ( $dummy = $imports.add( "java.util.stream.Collectors" ) )
#set ( $dummy = $imports.add( "java.util.stream.Stream" ) )
#set ( $dummy = $imports.add( "org.apache.maven.api.annotations.Generated" ) )
#set ( $dummy = $imports.add( "org.apache.maven.api.annotations.Nonnull" ) )
#foreach ( $field in $allFields )
#if ( $field.type == "java.util.List" )
#set ( $dummy = $imports.add( "java.util.ArrayList" ) )
#set ( $dummy = $types.put( $field, "List<" + $field.to + ">" ) )
#elseif ( $field.type == "DOM" )
#set ( $dummy = $imports.add( "org.codehaus.plexus.util.xml.Xpp3Dom" ) )
#set ( $dummy = $types.put( $field, "Object" ) )
#else
#set ( $fieldType = ${types.getOrDefault($field.type,$field.type)} )
#set ( $idx = $fieldType.lastIndexOf('.') )
#if ( $idx > 0 )
#set ( $dummy = $imports.add( $fieldType ) )
#set ( $dummy = $types.put( $fieldType, $fieldType.substring( $idx + 1 ) ) )
#end
#end
#end
#set ( $eq = "" )
#set ( $hc = "" )
#foreach ( $field in $allFields )
#if ( $field.identifier )
#set ( $dummy = $imports.add( "java.util.Objects" ) )
#set ( $dummy = $identifiers.add( $field ) )
#if ( $eq == "" )
#set ( $eq = "Objects.equals( this.${field.name}, that.${field.name} )" )
#else
#set ( $eq = "$eq && Objects.equals( this.${field.name}, that.${field.name} )" )
#end
#if ( $hc == "" )
#set ( $hc = "${field.name}" )
#else
#set ( $hc = "$hc, this.${field.name}" )
#end
#end
#end
// =================== DO NOT EDIT THIS FILE ====================
// Generated by Modello Velocity from ${template}
// template, any modifications will be overwritten.
// ==============================================================
package ${package};
#foreach ( $imp in $imports )
import $imp;
#end
@Generated
public class ${class.name}
#if ( $class.superClass )
extends ${class.superClass}
implements Serializable, Cloneable
#else
extends BaseObject
#end
{
public ${class.name}() {
this(${packageModelV4}.${class.name}.newInstance());
}
public ${class.name}(${packageModelV4}.${class.name} delegate) {
this(delegate, null);
}
public ${class.name}(${packageModelV4}.${class.name} delegate, BaseObject parent) {
super(delegate, parent);
}
public ${class.name} clone(){
return new ${class.name}(getDelegate());
}
#if ( $class.superClass )
@Override
#end
public ${packageModelV4}.${class.name} getDelegate() {
return (${packageModelV4}.${class.name}) super.getDelegate();
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || !(o instanceof ${class.name})) {
return false;
}
${class.name} that = (${class.name}) o;
return Objects.equals(this.delegate, that.delegate);
}
@Override
public int hashCode() {
return getDelegate().hashCode();
}
#if ( $class == $root )
public String getModelEncoding() {
return getDelegate().getModelEncoding();
}
#end
#foreach ( $field in $class.getFields($version) )
#set ( $cap = $Helper.capitalise( $field.name ) )
#set ( $type = ${types.getOrDefault($field,${types.getOrDefault($field.type,$field.type)})} )
#if ( $type == "boolean" || $type == "Boolean" )
#set ( $pfx = "is" )
#else
#set ( $pfx = "get" )
#end
#if ( $field.type == "java.util.List" || $field.type == "java.util.Properties" )
@Nonnull
#end
public ${type} ${pfx}${cap}() {
#if ( $field.to != "String" && $field.type == "java.util.List" && $field.multiplicity == "*" )
return new WrapperList<${field.to}, ${packageModelV4}.${field.to}>(
() -> getDelegate().get${cap}(), l -> update(getDelegate().with${cap}(l)),
d -> new ${field.to}(d, this), ${field.to}::getDelegate);
#elseif ( $field.to == "String" && $field.type == "java.util.Properties" && $field.multiplicity == "*" )
return new WrapperProperties(() -> getDelegate().get${cap}(), this::set${cap});
#elseif ( $field.to == "String" && $field.type == "java.util.List" && $field.multiplicity == "*" )
return new WrapperList<String, ${field.to}>(() -> getDelegate().get${cap}(), this::set${cap}, s -> s, s -> s);
#elseif ( $field.to )
return getDelegate().${pfx}${cap}() != null ? new ${field.to}(getDelegate().${pfx}${cap}(), this) : null;
#elseif ( $field.type == "DOM" )
return getDelegate().${pfx}${cap}() != null ? new Xpp3Dom(getDelegate().${pfx}${cap}(), this::replace) : null;
#else
return getDelegate().${pfx}${cap}();
#end
}
public void set${cap}(${type} ${field.name}) {
#if ($field.type == "DOM")
if (!Objects.equals(((Xpp3Dom) ${field.name}).getDom(), getDelegate().${pfx}${cap}())) {
update(getDelegate().with${cap}(((Xpp3Dom) ${field.name}).getDom()));
((Xpp3Dom) ${field.name}).setChildrenTracking(this::replace);
}
#elseif( $field.type == "java.util.Properties" )
Map<String, String> map = ${field.name}.entrySet().stream()
.collect(Collectors.toMap(e -> e.getKey().toString(), e -> e.getValue().toString()));
if (!Objects.equals(map, getDelegate().get${cap}())) {
update(getDelegate().with${cap}(map));
}
#else
if (!Objects.equals(${field.name}, getDelegate().${pfx}${cap}())) {
#if ( $field.to != "String" && $field.type == "java.util.List" && $field.multiplicity == "*" )
update(getDelegate().with${cap}(
${field.name}.stream().map(c -> c.getDelegate()).collect(Collectors.toList())));
${field.name}.forEach(e -> e.childrenTracking = this::replace);
#elseif ( $field.to && $field.to != "String" )
update(getDelegate().with${cap}(${field.name}.getDelegate()));
${field.name}.childrenTracking = this::replace;
#else
update(getDelegate().with${cap}(${field.name}));
#end
}
#end
}
#if ( $field.type == "java.util.List" && $field.multiplicity == "*" )
#set ( $v = $Helper.singular( ${field.name} ) )
#set ( $scap = $Helper.capitalise( $v ) )
public void add${scap}(${field.to} ${v}) {
#if ( $field.to == "String" )
update(getDelegate().with${cap}(
Stream.concat(getDelegate().get${cap}().stream(), Stream.of(${v}))
.collect(Collectors.toList())));
#else
update(getDelegate().with${cap}(
Stream.concat(getDelegate().get${cap}().stream(), Stream.of(${v}.getDelegate()))
.collect(Collectors.toList())));
${v}.childrenTracking = this::replace;
#end
}
public void remove${scap}(${field.to} ${v}) {
#if ( $field.to == "String" )
update(getDelegate().with${cap}(
getDelegate().get${cap}().stream()
.filter(e -> !Objects.equals(e, ${v}))
.collect(Collectors.toList())));
#else
update(getDelegate().with${cap}(
getDelegate().get${cap}().stream()
.filter(e -> !Objects.equals(e, ${v}))
.collect(Collectors.toList())));
${v}.childrenTracking = null;
#end
}
#elseif ( $field.type == "java.util.Properties" && $field.multiplicity == "*" )
#set ( $v = $Helper.singular( ${field.name} ) )
#set ( $scap = $Helper.capitalise( $v ) )
public void add${scap}(String key, String value) {
get${cap}().put(key, value);
}
#end
#end
#if ( $locationTracking )
public InputLocation getLocation(Object key) {
${packageModelV4}.InputLocation loc = getDelegate().getLocation(key);
return loc != null ? new InputLocation(loc) : null;
}
public void setLocation(Object key, InputLocation location) {
update(${packageModelV4}.${class.name}.newBuilder(getDelegate(), true)
.location(key, location.toApiLocation()).build());
}
#end
protected boolean replace(Object oldDelegate, Object newDelegate) {
if (super.replace(oldDelegate, newDelegate)) {
return true;
}
#foreach ( $field in $class.getFields($version) )
#set ( $cap = $Helper.capitalise( $field.name ) )
#set ( $type = ${types.getOrDefault($field,${types.getOrDefault($field.type,$field.type)})} )
#if ( $field.to && $field.multiplicity != "*" )
if (oldDelegate == getDelegate().get${cap}()) {
update(getDelegate().with${cap}((${packageModelV4}.${field.to}) newDelegate));
return true;
}
#elseif ($field.type == "java.util.List" && $field.to != "String")
if (getDelegate().get${cap}().contains(oldDelegate)) {
List<${packageModelV4}.${field.to}> list = new ArrayList<>(getDelegate().get${cap}());
list.replaceAll(d -> d == oldDelegate ? (${packageModelV4}.${field.to}) newDelegate : d);
update(getDelegate().with${cap}(list));
return true;
}
#elseif ( $field.type == "DOM" )
if (getDelegate().get${cap}() == oldDelegate) {
update(getDelegate().with${cap}((org.apache.maven.api.xml.XmlNode) newDelegate));
}
#end
#end
return false;
}
public static List<${packageModelV4}.${class.name}> ${Helper.uncapitalise(${class.name})}ToApiV4(List<${class.name}> list) {
return list != null ? new WrapperList<>(list, ${class.name}::getDelegate, ${class.name}::new) : null;
}
public static List<${class.name}> ${Helper.uncapitalise(${class.name})}ToApiV3(List<${packageModelV4}.${class.name}> list) {
return list != null ? new WrapperList<>(list, ${class.name}::new, ${class.name}::getDelegate) : null;
}
#foreach ( $cs in $class.getCodeSegments($version) )
$cs.code
#end
}
#end
#end