/**
  * Create a resource
  *
  * Note: Resources can be placed at arbitrary locations, or in a folder. Thus, you must set EITHER $parentFolder
  * OR the uri parameter of the Resource used in the first argument.
  *
  * @param \Jaspersoft\Dto\Resource\Resource $resource Resource object fully describing new resource
  * @param string $parentFolder folder in which the resource should be created
  * @param bool $createFolders Create folders in the path that may not exist?
  * @throws \Exception
  * @return \Jaspersoft\Dto\Resource\Resource
  */
 public function createResource(Resource $resource, $parentFolder = null, $createFolders = true)
 {
     if ($parentFolder == null) {
         if (isset($resource->uri)) {
             $verb = "PUT";
             $url = self::makeUrl(null, $resource->uri);
         } else {
             throw new ResourceServiceException("CreateResource: You must set either the parentFolder parameter or " . "set a URI for the provided resource.");
         }
     } else {
         $verb = "POST";
         $url = self::makeUrl(null, $parentFolder);
     }
     $url .= '?' . Util::query_suffix(array("createFolders" => $createFolders));
     $body = $resource->toJSON();
     $data = $this->service->prepAndSend($url, array(201, 200), $verb, $body, true, $resource->contentType(), 'application/json');
     return $resource::createFromJSON(json_decode($data, true), get_class($resource));
 }