/**
  * Returns an SnakFormatter for rendering snaks in the desired format
  * using the given options.
  *
  * @param string $format Use the SnakFormatter::FORMAT_XXX constants.
  * @param FormatterOptions $options
  *
  * @throws RuntimeException
  * @throws InvalidArgumentException
  * @return SnakFormatter
  */
 public function getSnakFormatter($format, FormatterOptions $options)
 {
     $options->defaultOption(SnakFormatter::OPT_ON_ERROR, SnakFormatter::ON_ERROR_WARN);
     $this->valueFormatterFactory->applyLanguageDefaults($options);
     $lang = $options->getOption(ValueFormatter::OPT_LANG);
     $noValueSnakFormatter = new MessageSnakFormatter('novalue', $this->getMessage('wikibase-snakview-snaktypeselector-novalue', $lang), $format);
     $someValueSnakFormatter = new MessageSnakFormatter('somevalue', $this->getMessage('wikibase-snakview-snaktypeselector-somevalue', $lang), $format);
     $valueFormatter = $this->valueFormatterFactory->getValueFormatter($format, $options);
     $valueSnakFormatter = new PropertyValueSnakFormatter($format, $options, $valueFormatter, $this->propertyDataTypeLookup, $this->dataTypeFactory);
     $formattersBySnakType = array('novalue' => $noValueSnakFormatter, 'somevalue' => $someValueSnakFormatter);
     $formattersByDataType = $this->createSnakFormatters($format, $options);
     // Register default formatter for the special '*' key.
     $formattersByDataType['*'] = $valueSnakFormatter;
     $snakFormatter = new DispatchingSnakFormatter($format, $this->propertyDataTypeLookup, $formattersBySnakType, $formattersByDataType);
     if ($options->getOption(SnakFormatter::OPT_ON_ERROR) === SnakFormatter::ON_ERROR_WARN) {
         $snakFormatter = new ErrorHandlingSnakFormatter($snakFormatter, $valueFormatter, $lang);
     }
     return $snakFormatter;
 }
Ejemplo n.º 2
0
 public function testDefaultOption()
 {
     $options = array('foo' => 42, 'bar' => 4.2, 'baz' => array('o_O', false, null, '42' => 42, array()));
     $formatterOptions = new FormatterOptions($options);
     foreach ($options as $option => $value) {
         $formatterOptions->defaultOption($option, 9001);
         $this->assertEquals(serialize($value), serialize($formatterOptions->getOption($option)), 'Defaulting a set option should not affect its value');
     }
     $defaults = array('N' => 42, 'y' => 4.2, 'a' => false, 'n' => array('42' => 42, array('')));
     foreach ($defaults as $option => $value) {
         $formatterOptions->defaultOption($option, $value);
         $this->assertEquals(serialize($value), serialize($formatterOptions->getOption($option)), 'Defaulting a not set option should affect its value');
     }
 }
 /**
  * Initializes the options keys ValueFormatter::OPT_LANG and
  * FormatterLabelDescriptionLookupFactory::OPT_LANGUAGE_FALLBACK_CHAIN if they are not yet set.
  *
  * @param FormatterOptions $options The options to modify.
  *
  * @throws InvalidArgumentException
  * @todo  : Sort out how the desired language is specified. We have two language options,
  *        each accepting different ways of specifying the language. That's not good.
  * @todo: this shouldn't be public at all. Perhaps factor it out into a helper class.
  */
 public function applyLanguageDefaults(FormatterOptions $options)
 {
     $options->defaultOption(ValueFormatter::OPT_LANG, $this->defaultLanguage->getCode());
     $lang = $options->getOption(ValueFormatter::OPT_LANG);
     if (!is_string($lang)) {
         throw new InvalidArgumentException('The value of OPT_LANG must be a language code. For a fallback chain, use OPT_LANGUAGE_FALLBACK_CHAIN.');
     }
     $fallbackOption = FormatterLabelDescriptionLookupFactory::OPT_LANGUAGE_FALLBACK_CHAIN;
     if (!$options->hasOption($fallbackOption)) {
         $fallbackMode = LanguageFallbackChainFactory::FALLBACK_ALL;
         $options->setOption($fallbackOption, $this->languageFallbackChainFactory->newFromLanguageCode($lang, $fallbackMode));
     }
     if (!$options->getOption($fallbackOption) instanceof LanguageFallbackChain) {
         throw new InvalidArgumentException('The value of OPT_LANGUAGE_FALLBACK_CHAIN must be ' . 'an instance of LanguageFallbackChain.');
     }
 }