// Path: examples/src/main/java/org/leandreck/endpoints/examples/RootType.java
// @TypeScriptType("MyTypeScriptType")
// public class RootType {
// 
//     private Long id;
// 
//     private String name;
//     private String givenName;
//     private int weight;
// 
//     private SimpleEnum[] simpleArray;
// 
//     @TypeScriptIgnore
//     private BigDecimal ignoredField;
// 
//     private transient String transientField;
// 
//     private char noPublicGetter;
// 
//     private List<SubType> subTypeList;
// 
//     private Map<String, SubType> subTypeMap;
// 
//     private Map<?, MapValueType> mapValue;
//     private Map<MapKeyType, ?> mapKey;
// 
//     public RootType() {
//         this.id = Long.MIN_VALUE;
//     }
// 
//     public RootType(final Long id) {
//         this.id = id;
//     }
// 
//     public Long getId() {
//         return id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public String getGivenName() {
//         return givenName;
//     }
// 
//     public int getWeight() {
//         return weight;
//     }
// 
//     public BigDecimal getIgnoredField() {
//         return ignoredField;
//     }
// 
//     public String getTransientField() {
//         return transientField;
//     }
// 
//     public void setId(Long id) {
//         this.id = id;
//     }
// 
//     public Map<String, SubType> getSubTypeMap() {
//         return subTypeMap;
//     }
// 
//     public void setSubTypeMap(Map<String, SubType> subTypeMap) {
//         this.subTypeMap = subTypeMap;
//     }
// 
//     public Map<?, MapValueType> getMapValue() {
//         return mapValue;
//     }
// 
//     public void setMapValue(Map<?, MapValueType> mapValue) {
//         this.mapValue = mapValue;
//     }
// 
//     public Map<MapKeyType, ?> getMapKey() {
//         return mapKey;
//     }
// 
//     public void setMapKey(Map<MapKeyType, ?> mapKey) {
//         this.mapKey = mapKey;
//     }
// 
//     public List<SubType> getSubTypeList() {
//         return subTypeList;
//     }
// 
//     public void setSubTypeList(List<SubType> subTypeList) {
//         this.subTypeList = subTypeList;
//     }
// 
//     public SimpleEnum[] getSimpleArray() {
//         return simpleArray;
//     }
// 
//     public void setSimpleArray(SimpleEnum[] simpleArray) {
//         this.simpleArray = simpleArray;
//     }
// }


import java.util.Map;
import java.util.Optional;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.web.bind.annotation.RequestMethod.POST;
import org.leandreck.endpoints.annotations.TypeScriptEndpoint;
import org.leandreck.endpoints.examples.RootType;
import org.leandreck.endpoints.examples.SubType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;
import java.util.ArrayList;
import java.util.List;
/**
 * Copyright © 2016 Mathias Kowalzik (Mathias.Kowalzik@leandreck.org)
 *
 * Licensed 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.leandreck.endpoints.examples.lombok;




/**
 * LombokTypeScriptEndpoint JavaDoc.
 *
 * @see StringBuilder
 * @see java.util.TreeMap
 * @since 0.3.0
 */
@TypeScriptEndpoint
@RestController
@RequestMapping("/api")
public class LombokTypeScriptEndpoint {

    /**
     * this is a simple javadoc for Method {@link #setId(Long, String, Optional, LombokRequest)}.
     * @param id id
     * @param typeRef a reference
     * @param queryParameter a query parameter
     * @param body a body parameter
     * @return LombokResponse
     */
    @RequestMapping(value = "/type/{idPathVariable}/{typeRef}", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
    public LombokResponse<ArrayList<SubType>, List<Object>, Boolean, Map<String, String>, SubType> setId(
            @PathVariable(name = "idPathVariable") Long id,
            @PathVariable String typeRef,
            @RequestParam(name = "queryRequestParam", required = false) Optional<String> queryParameter,
            @RequestBody(required = false) LombokRequest body) {
        // do something
        return new LombokResponse<>();
    }

    @RequestMapping(value = "/foo/{idPathVariable}/{typeRef}", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
// Path: examples/src/main/java/org/leandreck/endpoints/examples/RootType.java
// @TypeScriptType("MyTypeScriptType")
// public class RootType {
// 
//     private Long id;
// 
//     private String name;
//     private String givenName;
//     private int weight;
// 
//     private SimpleEnum[] simpleArray;
// 
//     @TypeScriptIgnore
//     private BigDecimal ignoredField;
// 
//     private transient String transientField;
// 
//     private char noPublicGetter;
// 
//     private List<SubType> subTypeList;
// 
//     private Map<String, SubType> subTypeMap;
// 
//     private Map<?, MapValueType> mapValue;
//     private Map<MapKeyType, ?> mapKey;
// 
//     public RootType() {
//         this.id = Long.MIN_VALUE;
//     }
// 
//     public RootType(final Long id) {
//         this.id = id;
//     }
// 
//     public Long getId() {
//         return id;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public String getGivenName() {
//         return givenName;
//     }
// 
//     public int getWeight() {
//         return weight;
//     }
// 
//     public BigDecimal getIgnoredField() {
//         return ignoredField;
//     }
// 
//     public String getTransientField() {
//         return transientField;
//     }
// 
//     public void setId(Long id) {
//         this.id = id;
//     }
// 
//     public Map<String, SubType> getSubTypeMap() {
//         return subTypeMap;
//     }
// 
//     public void setSubTypeMap(Map<String, SubType> subTypeMap) {
//         this.subTypeMap = subTypeMap;
//     }
// 
//     public Map<?, MapValueType> getMapValue() {
//         return mapValue;
//     }
// 
//     public void setMapValue(Map<?, MapValueType> mapValue) {
//         this.mapValue = mapValue;
//     }
// 
//     public Map<MapKeyType, ?> getMapKey() {
//         return mapKey;
//     }
// 
//     public void setMapKey(Map<MapKeyType, ?> mapKey) {
//         this.mapKey = mapKey;
//     }
// 
//     public List<SubType> getSubTypeList() {
//         return subTypeList;
//     }
// 
//     public void setSubTypeList(List<SubType> subTypeList) {
//         this.subTypeList = subTypeList;
//     }
// 
//     public SimpleEnum[] getSimpleArray() {
//         return simpleArray;
//     }
// 
//     public void setSimpleArray(SimpleEnum[] simpleArray) {
//         this.simpleArray = simpleArray;
//     }
// }


// Path: examples/src/main/java/org/leandreck/endpoints/examples/lombok/LombokTypeScriptEndpoint.java
import java.util.Map;
import java.util.Optional;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.web.bind.annotation.RequestMethod.POST;
import org.leandreck.endpoints.annotations.TypeScriptEndpoint;
import org.leandreck.endpoints.examples.RootType;
import org.leandreck.endpoints.examples.SubType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;
import java.util.ArrayList;
import java.util.List;

/**
 * Copyright © 2016 Mathias Kowalzik (Mathias.Kowalzik@leandreck.org)
 *
 * Licensed 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.leandreck.endpoints.examples.lombok;




/**
 * LombokTypeScriptEndpoint JavaDoc.
 *
 * @see StringBuilder
 * @see java.util.TreeMap
 * @since 0.3.0
 */
@TypeScriptEndpoint
@RestController
@RequestMapping("/api")
public class LombokTypeScriptEndpoint {

    /**
     * this is a simple javadoc for Method {@link #setId(Long, String, Optional, LombokRequest)}.
     * @param id id
     * @param typeRef a reference
     * @param queryParameter a query parameter
     * @param body a body parameter
     * @return LombokResponse
     */
    @RequestMapping(value = "/type/{idPathVariable}/{typeRef}", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
    public LombokResponse<ArrayList<SubType>, List<Object>, Boolean, Map<String, String>, SubType> setId(
            @PathVariable(name = "idPathVariable") Long id,
            @PathVariable String typeRef,
            @RequestParam(name = "queryRequestParam", required = false) Optional<String> queryParameter,
            @RequestBody(required = false) LombokRequest body) {
        // do something
        return new LombokResponse<>();
    }

    @RequestMapping(value = "/foo/{idPathVariable}/{typeRef}", method = POST, consumes = APPLICATION_JSON_VALUE, produces = APPLICATION_JSON_VALUE)
    public LombokResponse<List<RootType>, List<Object>, Boolean, SubType, RootType> setFoo(