
package org.fusesource.fabric.webui.profile

import collection.JavaConversions._

import org.fusesource.fabric.api.Profile
import javax.ws.rs._
import org.codehaus.jackson.annotate.JsonProperty
import org.fusesource.fabric.webui.{ByID, BaseResource}
import org.fusesource.fabric.webui.{ByID, BaseResource}

class ConfigurationsResource(profile: Profile) extends BaseResource {

  @JsonProperty
  def entries: Array[ConfigurationResource] = profile.getConfigurations
    .filterKeys(_ != "org.fusesource.fabric.agent")
    .map {
    case (k, v) =>
      new ConfigurationResource(profile, k, v)
  }.toArray.sortWith(ByID(_, _))

  @Path("{id}")
  def pids(@PathParam("id") id: String): ConfigurationResource = {
    entries.find(_.id == id).getOrElse {
      not_found
    }
  }

  @PUT
  def create(@FormParam("pid") id: String) = {
    if (id == "org.fusesource.fabric.agent") {
      throw new IllegalArgumentException("Cannot override agent configuration");
    }

    val map = new java.util.HashMap[String, String]
    var configurations = profile.getConfigurations
    configurations.put(id, map)
    profile.setConfigurations(configurations)

    new ConfigurationResource(profile, id, map)
  }
}
