// Path: java/src/main/java/monasca/api/domain/model/notificationmethod/NotificationMethodType.java
// public class NotificationMethodType extends AbstractEntity{
// 
//   private String type;
// 
// 
// public NotificationMethodType() {
// }
// 
// public NotificationMethodType(String type) {
//   this.type = type.toUpperCase();
// }
// 
// public String getType() {
//   return type;
// }
// 
// public void setType(String type) {
//   this.type = type;
// }
// 
// public String getId() {return type;} 
// 
// @Override
// public int hashCode() {
//   final int prime = 31;
//   int result = super.hashCode();
//   result = prime * result + ((type == null) ? 0 : type.hashCode());
//   return result;
// }
// 
// @Override
// public boolean equals(Object obj) {
//   if (this == obj)
//     return true;
//   if (!super.equals(obj))
//     return false;
//   if (getClass() != obj.getClass())
//     return false;
//   NotificationMethodType other = (NotificationMethodType) obj;
//   if (type == null) {
//      if (other.type != null)
//        return false;
//   } else if (!type.equals(other.type))
//        return false;
//   return true;
// }
// 
// 
// }
// 
// Path: java/src/main/java/monasca/api/domain/model/notificationmethod/NotificationMethodTypesRepo.java
// public interface NotificationMethodTypesRepo {
// 
//   List<String> listNotificationMethodTypes();
// }
// 
// Path: java/src/main/java/monasca/api/infrastructure/persistence/PersistUtils.java
// public class PersistUtils {
// 
//   private static final Logger logger = LoggerFactory.getLogger(PersistUtils.class);
// 
//   private int maxQueryLimit;
// 
//   private final int DEFAULT_MAX_QUERY_LIMIT = 10000;
// 
//   private DateTimeFormatter isoFormat = ISODateTimeFormat.dateTime();
// 
//   @Inject
//   public PersistUtils(ApiConfig config) {
// 
//     setMaxQueryLimit(config.maxQueryLimit);
// 
//   }
// 
//   private void setMaxQueryLimit(int maxQueryLimit) {
// 
//     // maxQueryLimit could be 0 if maxQueryLimit is not specified in the config file.
//     if (maxQueryLimit <= 0) {
// 
//       logger.warn(String.format("Found invalid maxQueryLimit: [%1d]. maxQueryLimit must be a positive integer.", maxQueryLimit));
//       logger.warn(String.format("Setting maxQueryLimit to default: [%1d]", DEFAULT_MAX_QUERY_LIMIT));
//       logger.warn("Please check your config file for a valid maxQueryLimit property");
// 
//       this.maxQueryLimit = DEFAULT_MAX_QUERY_LIMIT;
// 
//     } else {
// 
//       this.maxQueryLimit = maxQueryLimit;
//     }
//   }
// 
//   public PersistUtils(int maxQueryLimit) {
// 
//     setMaxQueryLimit(maxQueryLimit);
// 
//   }
// 
//   public PersistUtils() {
// 
//     this.maxQueryLimit = DEFAULT_MAX_QUERY_LIMIT;
//   }
// 
//   public int getLimit(String limit)  {
// 
//     if (limit == null || limit.isEmpty()) {
//       return this.maxQueryLimit;
//     }
// 
//     int limitInt;
//     try {
//       limitInt = Integer.parseInt(limit);
//     } catch (NumberFormatException e) {
//       throw new IllegalArgumentException(
//           String.format("Found invalid Limit: '%1$s'. Limit must be a positive integer.", limit));
//     }
// 
//     if (limitInt <= 0) {
//       throw new IllegalArgumentException(
//           String.format("Found invalid Limit: '%1$s'. Limit must be a positive integer.", limit));
//     }
// 
//     if (limitInt <= this.maxQueryLimit) {
// 
//       return limitInt;
// 
//     } else {
// 
//       return this.maxQueryLimit;
//     }
//   }
// 
//   public Date parseTimestamp(String timestampString) throws ParseException {
//     return isoFormat.parseDateTime(timestampString.trim().replace(' ', 'T')).toDate();
//   }
// }


import monasca.api.domain.model.notificationmethod.NotificationMethodType;
import monasca.api.domain.model.notificationmethod.NotificationMethodTypesRepo;
import monasca.api.infrastructure.persistence.PersistUtils;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo;
import com.codahale.metrics.annotation.Timed;
import monasca.api.ApiConfig;
/*
 * (C) Copyright 2016 Hewlett Packard Enterprise Development LP
 *
 * 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 monasca.api.resource;






/**
 * Notification Method resource implementation.
 */
@Path("/v2.0/notification-methods/types")
public class NotificationMethodTypesResource {


  NotificationMethodTypesRepo repo = null;
  private final PersistUtils persistUtils;


  @Inject
  public NotificationMethodTypesResource(ApiConfig config, NotificationMethodTypesRepo repo,
// Path: java/src/main/java/monasca/api/domain/model/notificationmethod/NotificationMethodType.java
// public class NotificationMethodType extends AbstractEntity{
// 
//   private String type;
// 
// 
// public NotificationMethodType() {
// }
// 
// public NotificationMethodType(String type) {
//   this.type = type.toUpperCase();
// }
// 
// public String getType() {
//   return type;
// }
// 
// public void setType(String type) {
//   this.type = type;
// }
// 
// public String getId() {return type;} 
// 
// @Override
// public int hashCode() {
//   final int prime = 31;
//   int result = super.hashCode();
//   result = prime * result + ((type == null) ? 0 : type.hashCode());
//   return result;
// }
// 
// @Override
// public boolean equals(Object obj) {
//   if (this == obj)
//     return true;
//   if (!super.equals(obj))
//     return false;
//   if (getClass() != obj.getClass())
//     return false;
//   NotificationMethodType other = (NotificationMethodType) obj;
//   if (type == null) {
//      if (other.type != null)
//        return false;
//   } else if (!type.equals(other.type))
//        return false;
//   return true;
// }
// 
// 
// }
// 
// Path: java/src/main/java/monasca/api/domain/model/notificationmethod/NotificationMethodTypesRepo.java
// public interface NotificationMethodTypesRepo {
// 
//   List<String> listNotificationMethodTypes();
// }
// 
// Path: java/src/main/java/monasca/api/infrastructure/persistence/PersistUtils.java
// public class PersistUtils {
// 
//   private static final Logger logger = LoggerFactory.getLogger(PersistUtils.class);
// 
//   private int maxQueryLimit;
// 
//   private final int DEFAULT_MAX_QUERY_LIMIT = 10000;
// 
//   private DateTimeFormatter isoFormat = ISODateTimeFormat.dateTime();
// 
//   @Inject
//   public PersistUtils(ApiConfig config) {
// 
//     setMaxQueryLimit(config.maxQueryLimit);
// 
//   }
// 
//   private void setMaxQueryLimit(int maxQueryLimit) {
// 
//     // maxQueryLimit could be 0 if maxQueryLimit is not specified in the config file.
//     if (maxQueryLimit <= 0) {
// 
//       logger.warn(String.format("Found invalid maxQueryLimit: [%1d]. maxQueryLimit must be a positive integer.", maxQueryLimit));
//       logger.warn(String.format("Setting maxQueryLimit to default: [%1d]", DEFAULT_MAX_QUERY_LIMIT));
//       logger.warn("Please check your config file for a valid maxQueryLimit property");
// 
//       this.maxQueryLimit = DEFAULT_MAX_QUERY_LIMIT;
// 
//     } else {
// 
//       this.maxQueryLimit = maxQueryLimit;
//     }
//   }
// 
//   public PersistUtils(int maxQueryLimit) {
// 
//     setMaxQueryLimit(maxQueryLimit);
// 
//   }
// 
//   public PersistUtils() {
// 
//     this.maxQueryLimit = DEFAULT_MAX_QUERY_LIMIT;
//   }
// 
//   public int getLimit(String limit)  {
// 
//     if (limit == null || limit.isEmpty()) {
//       return this.maxQueryLimit;
//     }
// 
//     int limitInt;
//     try {
//       limitInt = Integer.parseInt(limit);
//     } catch (NumberFormatException e) {
//       throw new IllegalArgumentException(
//           String.format("Found invalid Limit: '%1$s'. Limit must be a positive integer.", limit));
//     }
// 
//     if (limitInt <= 0) {
//       throw new IllegalArgumentException(
//           String.format("Found invalid Limit: '%1$s'. Limit must be a positive integer.", limit));
//     }
// 
//     if (limitInt <= this.maxQueryLimit) {
// 
//       return limitInt;
// 
//     } else {
// 
//       return this.maxQueryLimit;
//     }
//   }
// 
//   public Date parseTimestamp(String timestampString) throws ParseException {
//     return isoFormat.parseDateTime(timestampString.trim().replace(' ', 'T')).toDate();
//   }
// }


// Path: java/src/main/java/monasca/api/resource/NotificationMethodTypesResource.java
import monasca.api.domain.model.notificationmethod.NotificationMethodType;
import monasca.api.domain.model.notificationmethod.NotificationMethodTypesRepo;
import monasca.api.infrastructure.persistence.PersistUtils;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo;
import com.codahale.metrics.annotation.Timed;
import monasca.api.ApiConfig;

/*
 * (C) Copyright 2016 Hewlett Packard Enterprise Development LP
 *
 * 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 monasca.api.resource;






/**
 * Notification Method resource implementation.
 */
@Path("/v2.0/notification-methods/types")
public class NotificationMethodTypesResource {


  NotificationMethodTypesRepo repo = null;
  private final PersistUtils persistUtils;


  @Inject
  public NotificationMethodTypesResource(ApiConfig config, NotificationMethodTypesRepo repo,
                                         PersistUtils persistUtils) {