blob: d585a621db02579440ea29308fafe0b66f7b4c60 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.help.internal.criteria;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import org.eclipse.help.ICriteria;
import org.eclipse.help.internal.HelpPlugin;
/**
* A class represents one criterion, which has the name and values
*
* @since 3.5
*/
public class CriterionResource {
private String criterionName;
private List<String> criterionValues;
public CriterionResource(String criterionName){
this(criterionName, null);
}
public CriterionResource(String criterionName, List<String> criterionValues) {
this.criterionName = criterionName;
this.criterionValues = new ArrayList<>();
if(null != criterionValues) {
this.addCriterionValues(criterionValues);
}
}
public String getCriterionName(){
return this.criterionName;
}
public List<String> getCriterionValues() {
return this.criterionValues;
}
public void addCriterionValue(String criterionValue){
if(null != criterionValue && 0 != criterionValue.length() && !criterionValues.contains(criterionValue)){
criterionValues.add(criterionValue);
}
}
public void addCriterionValues(List<String> criterionValues) {
for (Iterator<String> iterator = criterionValues.iterator(); iterator.hasNext();) {
String criterionValue = iterator.next();
this.addCriterionValue(criterionValue);
}
}
public static CriterionResource[] toCriterionResource(ICriteria[] criteriaElements) {
List<CriterionResource> criteriaList = new ArrayList<>();
outer: for (int i = 0; i < criteriaElements.length; ++i) {
String elementName = criteriaElements[i].getName();
String elementValue = criteriaElements[i].getValue();
if (null != elementName && 0 != elementName.length() && null != elementValue
&& 0 != elementValue.length()) {
if (HelpPlugin.getCriteriaManager().isSupportedCriterion(elementName)) {
elementName = elementName.toLowerCase();
StringTokenizer tokenizer = new StringTokenizer(elementValue, ","); //$NON-NLS-1$
List<String> values = new ArrayList<>();
while (tokenizer.hasMoreTokens()) {
values.add(tokenizer.nextToken().trim());
}
for(int j = 0; j < criteriaList.size(); ++j){
CriterionResource criterion = criteriaList.get(j);
if(elementName.equals(criterion.getCriterionName())){
criterion.addCriterionValues(values);
continue outer;
}
}
CriterionResource criterionResource = new CriterionResource(elementName, values);
criteriaList.add(criterionResource);
}
}
}
CriterionResource[] criteria = new CriterionResource[criteriaList.size()];
criteriaList.toArray(criteria);
return criteria;
}
}