/*************************************************************************** * * **************************************************************************/ @Nonnull public static <OptionType, Option extends OptionType> Option findOption (@Nonnull final OptionType[] options, @Nonnull final Option default_, @Nonnull final Class<Option> optionClass) { validateOptions(options); for (final OptionType option : options) { if (optionClass.isAssignableFrom(option.getClass())) { return (Option)option; } } return default_; }
/*************************************************************************** * * {@inheritDoc} * **************************************************************************/ @Nonnull final public List<MetadataItemHolder<Item>> findOrCreateItems (@Nonnull final DataObject dataObject, @Nonnull final FindOption ... options) { logger.fine("findOrCreateItems(%s, %s)", dataObject, Arrays.toString(options)); if (dataObject == null) { throw new IllegalArgumentException("dataObject is mandatory"); } MetadataSpiUtils.validateOptions(options); final List<MetadataItemHolder<Item>> holders = findItems(itemClass, dataObject, options); // The new holder will have isAvailable() == false // FIXME: have a Map and make sure that the same instance for each DataObject is returned if (holders.isEmpty()) { holders.add(createNewItem()); } return holders; }
/*************************************************************************** * * {@inheritDoc} * **************************************************************************/ @Override public <Item> int storeItem (@Nonnull final MetadataItemHolder<Item> holder, @Nonnull final StoreOption ... options) throws NoSuchMetadataTypeException { logger.info("storeItem(%s, %s)", holder, Arrays.toString(options)); if (holder == null) { throw new IllegalArgumentException("holder is mandatory"); } MetadataSpiUtils.validateOptions(options); final Class<Item> itemClass = (Class<Item>)holder.get().getClass(); final MetadataItemProvider<Item> metadataProvider = (MetadataItemProvider<Item>)providerMapByClass.get(itemClass); if (metadataProvider == null) { throw new NoSuchMetadataTypeException(itemClass); } return metadataProvider.storeItem(getDataObject(), holder, options); }