/*
 * 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.
 */
package org.apache.usergrid.rest.test.resource2point0.endpoints;

import org.apache.usergrid.rest.test.resource2point0.endpoints.NamedResource;
import org.apache.usergrid.rest.test.resource2point0.endpoints.UrlResource;
import org.apache.usergrid.rest.test.resource2point0.model.ApiResponse;
import org.apache.usergrid.rest.test.resource2point0.model.Application;
import org.apache.usergrid.rest.test.resource2point0.model.Group;
import org.apache.usergrid.rest.test.resource2point0.model.Role;
import org.apache.usergrid.rest.test.resource2point0.state.ClientContext;

import javax.ws.rs.core.MediaType;

/**
 * Created by rockerston on 12/16/14.
 */
public class RolesResource extends NamedResource{

    public RolesResource(ClientContext context, UrlResource parent) {
        super("roles", context, parent);
    }


    public Role post(Role role){
        ApiResponse response =getResource(true).type( MediaType.APPLICATION_JSON_TYPE ).accept( MediaType.APPLICATION_JSON )
                .post( ApiResponse.class, role );

        return new Role(response);

    }

    public Application put(Application application){
        ApiResponse response =getResource(true).type( MediaType.APPLICATION_JSON_TYPE ).accept( MediaType.APPLICATION_JSON )
                .put(ApiResponse.class, application );

        return new Application(response);

    }


    public ApiResponse get(){
        ApiResponse response =getResource(true).type( MediaType.APPLICATION_JSON_TYPE ).accept( MediaType.APPLICATION_JSON )
                .get(ApiResponse.class);

        return response;

    }

    public void delete(Application application){
        ApiResponse response =getResource(true).type( MediaType.APPLICATION_JSON_TYPE ).accept( MediaType.APPLICATION_JSON )
                .delete(ApiResponse.class );
    }

}

@@ -1483,29 +1483,61 @@
 extends 
-NamedResource
+AbstractCollectionResource%3CRole,RoleResource%3E
 %7B%0A%0A    p
@@ -1653,217 +1653,77 @@
  %7D%0A%0A
-%0A
     
-public Role post(Role role)%7B%0A        ApiResponse response =getResource(true).type( MediaType.APPLICATION_JSON_TYPE ).accept( MediaType.APPLICATION_JSON )%0A                .post( ApiResponse.class, role );%0A
+@Override%0A    protected Role instantiateT(ApiResponse response) %7B
 %0A   
@@ -1750,25 +1750,24 @@
 (response);%0A
-%0A
     %7D%0A%0A    p
@@ -1769,735 +1769,189 @@
     
-public Application put(Application application)%7B%0A        ApiResponse response =getResource(true).type( MediaType.APPLICATION_JSON_TYPE ).accept( MediaType.APPLICATION_JSON )%0A                .put(ApiResponse.class, application );%0A%0A        return new Application(response);%0A%0A    %7D%0A%0A%0A    public ApiResponse get()%7B%0A        ApiResponse response =getResource(true).type( MediaType.APPLICATION_JSON_TYPE ).accept( MediaType.APPLICATION_JSON )%0A                .get(ApiResponse.class);%0A%0A        return response;%0A%0A    %7D%0A%0A    public void delete(Application application)%7B%0A        ApiResponse response =getResource(true).type( MediaType.APPLICATION_JSON_TYPE ).accept( MediaType.APPLICATION_JSON )%0A                .delete(ApiResponse.class 
+@Override%0A    protected RoleResource instantiateSubResource(String identifier, ClientContext context, UrlResource parent) %7B%0A        return new RoleResource(identifier,context,parent
 );%0A 
@@ -1956,10 +1956,12 @@
 %0A    %7D%0A%0A
+%0A%0A
 %7D%0A

update roles resource