getFileId();
try {
$metadataType = $filesMetadata->getType($key);
} catch (FilesMetadataNotFoundException $e) {
return;
}
/**
* might look harsh, but a lot simpler than comparing current indexed data, as we can expect
* conflict with a change of types.
* We assume that each time one random metadata were modified we can drop all index for this
* key and recreate them.
* To make it slightly cleaner, we'll use transaction
*/
$this->dbConnection->beginTransaction();
try {
$this->dropIndex($fileId, $key);
match ($metadataType) {
IMetadataValueWrapper::TYPE_STRING => $this->insertIndexString($fileId, $key, $filesMetadata->getString($key)),
IMetadataValueWrapper::TYPE_INT => $this->insertIndexInt($fileId, $key, $filesMetadata->getInt($key)),
IMetadataValueWrapper::TYPE_BOOL => $this->insertIndexBool($fileId, $key, $filesMetadata->getBool($key)),
IMetadataValueWrapper::TYPE_STRING_LIST => $this->insertIndexStringList($fileId, $key, $filesMetadata->getStringList($key)),
IMetadataValueWrapper::TYPE_INT_LIST => $this->insertIndexIntList($fileId, $key, $filesMetadata->getIntList($key))
};
} catch (FilesMetadataNotFoundException|FilesMetadataTypeException|DbException $e) {
$this->dbConnection->rollBack();
$this->logger->warning('issue while updateIndex', ['exception' => $e, 'fileId' => $fileId, 'key' => $key]);
}
$this->dbConnection->commit();
}
/**
* insert a new entry in the metadata_index table for a string value
*
* @param int $fileId file id
* @param string $key metadata key
* @param string $value metadata value
*
* @throws DbException
*/
private function insertIndexString(int $fileId, string $key, string $value): void {
$qb = $this->dbConnection->getQueryBuilder();
$qb->insert(self::TABLE_METADATA_INDEX)
->setValue('meta_key', $qb->createNamedParameter($key))
->setValue('meta_value_string', $qb->createNamedParameter($value))
->setValue('file_id', $qb->createNamedParameter($fileId, IQueryBuilder::PARAM_INT));
$qb->executeStatement();
}
/**
* insert a new entry in the metadata_index table for an int value
*
* @param int $fileId file id
* @param string $key metadata key
* @param int $value metadata value
*
* @throws DbException
*/
public function insertIndexInt(int $fileId, string $key, int $value): void {
$qb = $this->dbConnection->getQueryBuilder();
$qb->insert(self::TABLE_METADATA_INDEX)
->setValue('meta_key', $qb->createNamedParameter($key))
->setValue('meta_value_int', $qb->createNamedParameter($value, IQueryBuilder::PARAM_INT))
->setValue('file_id', $qb->createNamedParameter($fileId, IQueryBuilder::PARAM_INT));
$qb->executeStatement();
}
/**
* insert a new entry in the metadata_index table for a bool value
*
* @param int $fileId file id
* @param string $key metadata key
* @param bool $value metadata value
*
* @throws DbException
*/
public function insertIndexBool(int $fileId, string $key, bool $value): void {
$qb = $this->dbConnection->getQueryBuilder();
$qb->insert(self::TABLE_METADATA_INDEX)
->setValue('meta_key', $qb->createNamedParameter($key))
->setValue('meta_value_int', $qb->createNamedParameter(($value) ? '1' : '0', IQueryBuilder::PARAM_INT))
->setValue('file_id', $qb->createNamedParameter($fileId, IQueryBuilder::PARAM_INT));
$qb->executeStatement();
}
/**
* insert entries in the metadata_index table for list of string
*
* @param int $fileId file id
* @param string $key metadata key
* @param string[] $values metadata values
*
* @throws DbException
*/
public function insertIndexStringList(int $fileId, string $key, array $values): void {
foreach ($values as $value) {
$this->insertIndexString($fileId, $key, $value);
}
}
/**
* insert entries in the metadata_index table for list of int
*
* @param int $fileId file id
* @param string $key metadata key
* @param int[] $values metadata values
*
* @throws DbException
*/
public function insertIndexIntList(int $fileId, string $key, array $values): void {
foreach ($values as $value) {
$this->insertIndexInt($fileId, $key, $value);
}
}
/**
* drop indexes related to a file id
* if a key is specified, only drop entries related to it
*
* @param int $fileId file id
* @param string $key metadata key
*
* @throws DbException
*/
public function dropIndex(int $fileId, string $key = ''): void {
$qb = $this->dbConnection->getQueryBuilder();
$expr = $qb->expr();
$qb->delete(self::TABLE_METADATA_INDEX)
->where($expr->eq('file_id', $qb->createNamedParameter($fileId, IQueryBuilder::PARAM_INT)));
if ($key !== '') {
$qb->andWhere($expr->eq('meta_key', $qb->createNamedParameter($key)));
}
$qb->executeStatement();
}
}
=72b1376d379540ae64e1326bd5f287d423d8c5ef'>treecommitdiffstats
|
blob: ff5c87e32c97f0ca16b29d4e704cde5214310fc2 (
plain)
1
2
3
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
|
/*
* Copyright 1999-2004 The Apache Software Foundation.
*
* 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.
*/
/* $Id$ */
package org.apache.fop.plan;
import java.util.HashMap;
import org.w3c.dom.Document;
/**
* This interface defines how a plan drawer is converted.
*/
public interface PlanDrawer {
Document createDocument(EventList data, float w, float h,
HashMap hints);
}
|