![JAR search and dependency download from the Maven repository](/logo.png)
org.protempa.valueset.ValueSet Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of protempa-framework Show documentation
Show all versions of protempa-framework Show documentation
Protempa Framework is the core of Protempa.
/*
* #%L
* Protempa Framework
* %%
* Copyright (C) 2012 - 2013 Emory University
* %%
* 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.
* #L%
*/
package org.protempa.valueset;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.protempa.NotRecordedSourceId;
import org.protempa.ProtempaUtil;
import org.protempa.SourceId;
import org.protempa.proposition.value.OrderedValue;
import org.protempa.proposition.value.Value;
import org.protempa.proposition.value.ValueComparator;
/**
* For specifying value sets.
*
* @author Andrew Post
*/
public final class ValueSet {
private static final Logger LOGGER = Logger.getLogger(ValueSet.class.getName());
private static final ValueSetElement[] EMPTY_VALUE_SET_ELT_ARRAY =
new ValueSetElement[0];
private final String id;
private final String displayName;
private final ValueSetElement[] valueSetElements;
private final Map values;
private final Set valuesKeySet;
private final OrderedValue lowerBound;
private final OrderedValue upperBound;
private final SourceId sourceId;
private final boolean ordered;
public ValueSet(String id, String displayName, OrderedValue lowerBound,
OrderedValue upperBound, SourceId sourceId) {
if (id == null) {
throw new IllegalArgumentException("id cannot be null");
}
this.id = id.intern();
this.displayName = displayName;
this.lowerBound = lowerBound;
this.upperBound = upperBound;
this.valueSetElements = EMPTY_VALUE_SET_ELT_ARRAY;
this.values = new HashMap<>();
this.valuesKeySet = this.values.keySet();
if (sourceId == null) {
this.sourceId = NotRecordedSourceId.getInstance();
} else {
this.sourceId = sourceId;
}
this.ordered = true;
}
public ValueSet(String id, String displayName,
ValueSetElement[] valueSetElements, SourceId sourceId) {
this(id, displayName, valueSetElements, false, sourceId);
}
/**
* Instantiates a new value set with the specified values (value set
* elements).
*
* @param valueSetElements a {@link ValueSetElement[]}. No duplicate
* {@link ValueSetElement}s are allowed.
*/
public ValueSet(String id, String displayName,
ValueSetElement[] valueSetElements, boolean ordered,
SourceId sourceId) {
if (id == null) {
throw new IllegalArgumentException("id cannot be null");
}
ProtempaUtil.checkArray(valueSetElements, "valueSetElements");
this.id = id.intern();
this.displayName = displayName;
this.valueSetElements = valueSetElements.clone();
this.ordered = ordered;
this.values = new HashMap<>();
for (ValueSetElement vse : this.valueSetElements) {
if (this.values.containsKey(vse.getValue())) {
if (LOGGER.isLoggable(Level.WARNING)) {
LOGGER.log(Level.WARNING,
"Ignoring duplicate value {0} for id {1}",
new Object[]{vse.getValue().getFormatted(), id});
}
} else {
this.values.put(vse.getValue(), vse);
}
}
this.valuesKeySet = this.values.keySet();
this.lowerBound = null;
this.upperBound = null;
if (sourceId == null) {
this.sourceId = NotRecordedSourceId.getInstance();
} else {
this.sourceId = sourceId;
}
}
/**
* Returns the value set's unique identifier.
*
* @return a unique identifer {@link String}.
*/
public String getId() {
return this.id;
}
public String getDisplayName() {
return displayName;
}
/**
* Returns the source of this value set.
*
* @return a {@link SourceId}, guaranteed not null
.
*/
public SourceId getSourceId() {
return this.sourceId;
}
/**
* Gets the elements of this value set, if specified. If the
* ordered
property has value true
, then the
* order in which the value set elements are returned is significant. If
* false
, it is not.
*
* @return a {@link ValueSetElement[]}. Guaranteed not null.
*/
public ValueSetElement[] getValueSetElements() {
return this.valueSetElements;
}
public boolean isOrdered() {
return ordered;
}
/**
* Gets the lower bound of this value set, if specified.
*
* @return a lower bound {@link OrderedValue}.
*/
public OrderedValue getLowerBound() {
return this.lowerBound;
}
/**
* Gets the upper bound of this value set, if specified.
*
* @return an upper bound {@link OrderedValue}.
*/
public OrderedValue getUpperBound() {
return this.upperBound;
}
/**
* Returns whether the specified value is in the value set.
*
* @param value a {@link Value}. Cannot be null
.
* @return true
or false
.
*/
public boolean isInValueSet(Value value) {
if (value == null) {
throw new IllegalArgumentException("value cannot be null");
}
boolean result = true;
if (!this.valuesKeySet.isEmpty()) {
result = this.valuesKeySet.contains(value);
} else if (this.lowerBound != null || this.upperBound != null) {
if (this.lowerBound != null
&& !ValueComparator.GREATER_THAN_OR_EQUAL_TO.compare(
value, this.lowerBound)) {
result = false;
}
if (this.upperBound != null
&& !ValueComparator.LESS_THAN_OR_EQUAL_TO.compare(
value, this.upperBound)) {
result = false;
}
}
return result;
}
/**
* Returns a display name for the specified value, if one is defined.
*
* @param value a {@link Value}. Cannot be null
.
* @return a {@link String}.
*/
public String displayName(Value value) {
if (value == null) {
throw new IllegalArgumentException("value cannot be null");
}
ValueSetElement vse = this.values.get(value);
if (vse != null) {
return vse.getDisplayName();
} else {
return "";
}
}
/**
* Returns an abbreviated display name for the specified value, if one is
* defined.
*
* @param value a {@link Value}. Cannot be null
.
* @return a {@link String}.
*/
public String abbrevDisplayName(Value value) {
if (value == null) {
throw new IllegalArgumentException("value cannot be null");
}
ValueSetElement vse = this.values.get(value);
if (vse != null) {
return vse.getAbbrevDisplayName();
} else {
return "";
}
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
public ValueSetBuilder asBuilder() {
ValueSetBuilder builder = new ValueSetBuilder();
builder.setId(this.id);
builder.setDisplayName(this.displayName);
builder.setLowerBoundBuilder(this.lowerBound != null ? this.lowerBound.asBuilder() : null);
builder.setSourceIdBuilder(this.sourceId.asBuilder());
builder.setUpperBoundBuilder(this.upperBound != null ? this.upperBound.asBuilder() : null);
ValueSetElementBuilder[] vseBuilders = new ValueSetElementBuilder[this.valueSetElements.length];
for (int i = 0; i < this.valueSetElements.length; i++) {
vseBuilders[i] = this.valueSetElements[i].asBuilder();
}
builder.setValueSetElementBuilders(vseBuilders);
return builder;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy