/**
* Licensed to The Apereo Foundation under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
*
* The Apereo Foundation licenses this file to you under the Educational
* Community 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://opensource.org/licenses/ecl2.txt
*
* 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 org.opencastproject.matterhorn.search.impl;
import org.opencastproject.matterhorn.search.Language;
import org.opencastproject.matterhorn.search.SearchMetadata;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Default implementation for the {@link SearchMetadata}.
*/
public class SearchMetadataImpl<T> implements SearchMetadata<T> {
/** The name of this metadata item */
protected String name = null;
/** Values */
protected List<T> values = new ArrayList<T>();
/** Localized values */
protected Map<Language, List<T>> localizedValues = new HashMap<Language, List<T>>();
/** True to add the values to the fulltext index */
protected boolean addToText = false;
/**
* Creates a new metadata object with the given name and values.
*
* @param name
* the metadata name
* @param values
* the language neutral values
* @param localizedValues
* the localized values
* @param addToText
* <code>true</code> to add these items to the user facing fulltext index
*/
public SearchMetadataImpl(String name, List<T> values, Map<Language, List<T>> localizedValues, boolean addToText) {
this.name = name;
this.values = values;
this.localizedValues = localizedValues;
this.addToText = addToText;
}
/**
* Creates a new metadata item with the given name.
*
* @param name
* the name
*/
public SearchMetadataImpl(String name) {
this.name = name;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.matterhorn.search.SearchMetadata#getName()
*/
public String getName() {
return name;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.matterhorn.search.SearchMetadata#isLocalized()
*/
public boolean isLocalized() {
return localizedValues != null && localizedValues.size() > 0;
}
/**
* Adds <code>value</code> to the list of language neutral values.
*
* @param language
* the language
* @param v
* the value
*/
public void addLocalizedValue(Language language, T v) {
if (localizedValues == null)
localizedValues = new HashMap<Language, List<T>>();
List<T> values = localizedValues.get(language);
if (values == null)
values = new ArrayList<T>();
if (!values.contains(v))
values.add(v);
localizedValues.put(language, values);
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.matterhorn.search.SearchMetadata#getLocalizedValues()
*/
public Map<Language, List<T>> getLocalizedValues() {
if (localizedValues == null)
return Collections.emptyMap();
return localizedValues;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.matterhorn.search.SearchMetadata#addValue(java.lang.Object)
*/
public void addValue(T v) {
if (values == null)
values = new ArrayList<T>();
if (!values.contains(v))
values.add(v);
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.matterhorn.search.SearchMetadata#getValues()
*/
public List<T> getValues() {
if (values == null)
return Collections.emptyList();
return values;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.matterhorn.search.SearchMetadata#getValue()
*/
@Override
public T getValue() {
if (values == null || values.size() == 0)
return null;
return values.get(0);
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.matterhorn.search.SearchMetadata#setAddToText(boolean)
*/
public void setAddToText(boolean addToText) {
this.addToText = addToText;
}
/**
* {@inheritDoc}
*/
public boolean addToText() {
return addToText;
}
/**
* {@inheritDoc}
*
* @see org.opencastproject.matterhorn.search.SearchMetadata#clear()
*/
public void clear() {
if (values != null)
values.clear();
if (localizedValues != null)
localizedValues.clear();
}
/**
* {@inheritDoc}
*
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode() {
return name.hashCode();
}
/**
* {@inheritDoc}
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj) {
if (!(obj instanceof SearchMetadata<?>))
return false;
return name.equals(((SearchMetadata<?>) obj).getName());
}
/**
* {@inheritDoc}
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return name;
}
}