blob: 704e5206394c6201ace0029850aad605c76a00d3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*/
package org.apache.uima.caseditor.editor;
import org.apache.uima.cas.Feature;
import org.apache.uima.cas.FeatureStructure;
import org.apache.uima.cas.text.AnnotationFS;
import org.apache.uima.caseditor.editor.util.Primitives;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IAdaptable;
public final class FeatureValue implements IAdaptable {
private FeatureStructure mStructure;
private Feature mFeature;
/**
* Initializes a new instance.
*
* @param feature
* @param value
*/
public FeatureValue(ICasDocument document, FeatureStructure structure, Feature feature) {
Assert.isNotNull(document);
// TODO: Remove document parameter ? Not needed anymore!
Assert.isNotNull(feature);
mFeature = feature;
Assert.isNotNull(feature);
mStructure = structure;
}
public FeatureStructure getFeatureStructure() {
return mStructure;
}
public Object getValue() {
if (mFeature.getRange().isPrimitive()) {
return Primitives.getPrimitiv(mStructure, mFeature);
}
return mStructure.getFeatureValue(mFeature);
}
@SuppressWarnings("unchecked")
public Object getAdapter(Class adapter) {
if (AnnotationFS.class.equals(adapter)) {
if (getValue() instanceof AnnotationFS) {
return getValue();
}
}
if (FeatureStructure.class.equals(adapter)) {
if (getValue() instanceof FeatureStructure) {
return getValue();
}
}
return null;
}
@Override
public boolean equals(Object object) {
boolean result = false;
if (this == object) {
result = true;
} else if (object != null && object instanceof FeatureValue) {
FeatureValue valueToCompare = (FeatureValue) object;
result = valueToCompare.mStructure.equals(mStructure)
&& valueToCompare.mFeature.equals(mFeature);
}
return result;
}
@Override
public int hashCode() {
return mStructure.hashCode() | mFeature.hashCode();
}
/**
* Retrieves the {@link Feature}.
*
* @return the {@link Feature}
*/
public Feature getFeature() {
return mFeature;
}
}