, array{}> * * 200: Available templates returned */ #[NoAdminRequired] public function list(): DataResponse { /* Convert embedded Template instances to arrays to match return type */ return new DataResponse(array_map(static function (array $templateFileCreator) { $templateFileCreator['templates'] = array_map(static fn (Template $template) => $template->jsonSerialize(), $templateFileCreator['templates']); return $templateFileCreator; }, $this->templateManager->listTemplates())); } /** * List the fields for the template specified by the given file ID * * @param int $fileId File ID of the template * @return DataResponse, array{}> * * 200: Fields returned */ #[NoAdminRequired] public function listTemplateFields(int $fileId): DataResponse { $fields = $this->templateManager->listTemplateFields($fileId); return new DataResponse( array_merge([], ...$fields), Http::STATUS_OK ); } /** * Create a template * * @param string $filePath Path of the file * @param string $templatePath Name of the template * @param string $templateType Type of the template * @param list $templateFields Fields of the template * * @return DataResponse * @throws OCSForbiddenException Creating template is not allowed * * 200: Template created successfully */ #[NoAdminRequired] public function create( string $filePath, string $templatePath = '', string $templateType = 'user', array $templateFields = [], ): DataResponse { try { return new DataResponse($this->templateManager->createFromTemplate( $filePath, $templatePath, $templateType, $templateFields)); } catch (GenericFileException $e) { throw new OCSForbiddenException($e->getMessage()); } } /** * Initialize the template directory * * @param string $templatePath Path of the template directory * @param bool $copySystemTemplates Whether to copy the system templates to the template directory * * @return DataResponse}, array{}> * @throws OCSForbiddenException Initializing the template directory is not allowed * * 200: Template directory initialized successfully */ #[NoAdminRequired] public function path(string $templatePath = '', bool $copySystemTemplates = false) { try { /** @var string $templatePath */ $templatePath = $this->templateManager->initializeTemplateDirectory($templatePath, null, $copySystemTemplates); return new DataResponse([ 'template_path' => $templatePath, 'templates' => array_values(array_map(fn (TemplateFileCreator $creator) => $creator->jsonSerialize(), $this->templateManager->listCreators())), ]); } catch (\Exception $e) { throw new OCSForbiddenException($e->getMessage()); } } } 4'>4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
// Copyright (C) 2014 Tom <tw201207@gmail.com>
//
// Licensed 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 com.gitblit.utils;

import java.io.ByteArrayOutputStream;

/**
 * A {@link ByteArrayOutputStream} that can be reset to a specified position.
 *
 * @author Tom <tw201207@gmail.com>
 */
public class ResettableByteArrayOutputStream extends ByteArrayOutputStream {

	/**
	 * Reset the stream to the given position. If {@code mark} is <= 0, see {@link #reset()}.
	 * A no-op if the stream contains less than {@code mark} bytes. Otherwise, resets the
	 * current writing position to {@code mark}. Previously allocated buffer space will be
	 * reused in subsequent writes.
	 *
	 * @param mark
	 *            to set the current writing position to.
	 */
	public synchronized void resetTo(int mark) {
		if (mark <= 0) {
			reset();
		} else if (mark < count) {
			count = mark;
		}
	}

}