/** * Factory method * * @param var arg either an InputStream, File, or IOElement * @return self * @throws lang.IllegalArgumentException */ public static function of($arg) { if ($arg instanceof InputStream) { return new self($arg); } else { if ($arg instanceof File) { return create(new self($arg->getInputStream()))->withMediaType(MimeType::getByFileName($arg->getFileName()))->withContentLength($arg->getSize())->withLastModified(new Date($arg->lastModified())); } else { if ($arg instanceof IOElement) { return create(new self($arg->getInputStream()))->withMediaType(MimeType::getByFileName($arg->getURI()))->withContentLength($arg->getSize())->withLastModified($arg->lastModified()); } else { throw new IllegalArgumentException('Expected either an InputStream, File, or IOElement, have ' . xp::typeOf($arg)); } } } }