/** * 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)); }