blob: 0203a3d4e132f41844042a0ca95e53f637c270bc [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2015 Ericsson
*
* All rights reserved. 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:
* Alexandre Montplaisir - Initial API and implementation
* Patrick Tasse - Renamed from TmfEventFieldAspect and support subfield array
*******************************************************************************/
package org.eclipse.tracecompass.tmf.core.event.aspect;
import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull;
import java.util.Arrays;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.tracecompass.tmf.core.event.ITmfEvent;
import org.eclipse.tracecompass.tmf.core.event.ITmfEventField;
/**
* Event aspect representing a single field of an event's content.
*
* @author Alexandre Montplaisir
*/
public class TmfContentFieldAspect implements ITmfEventAspect<Object> {
private final String fAspectName;
private final String[] fFieldPath;
private final String fHelpText;
/**
* Constructor
*
* @param aspectName
* The name of the aspect. Should be localized.
* @param fieldPath
* The field name or absolute field path array to look for in the
* event content. Should *not* be localized!
*/
public TmfContentFieldAspect(String aspectName, @NonNull String... fieldPath) {
this(aspectName, EMPTY_STRING, fieldPath);
}
private TmfContentFieldAspect(String aspectName, String helpText, @NonNull String... fieldPath) {
fAspectName = aspectName;
fFieldPath = checkNotNull(Arrays.copyOf(fieldPath, fieldPath.length));
fHelpText = helpText;
}
/**
* Creates a new instance of this aspect with the specified name, help text,
* and field path.
*
* @param aspectName
* The name of the aspect. Should be localized.
* @param helpText
* The help text.
* @param fieldPath
* The field name or absolute field path array to look for in the
* event content. Should *not* be localized!
* @return the new aspect
* @since 1.0
*/
public static TmfContentFieldAspect create(String aspectName, String helpText, @NonNull String... fieldPath) {
return new TmfContentFieldAspect(aspectName, helpText, fieldPath);
}
@Override
public String getName() {
return fAspectName;
}
@Override
public String getHelpText() {
return fHelpText;
}
@Override
public @Nullable Object resolve(ITmfEvent event) {
ITmfEventField field = event.getContent().getField(fFieldPath);
if (field == null) {
return null;
}
return field.getValue();
}
// ------------------------------------------------------------------------
// hashCode/equals
// Typically we want identical field aspects to be merged together.
// ------------------------------------------------------------------------
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + fAspectName.hashCode();
result = prime * result + Arrays.hashCode(fFieldPath);
result = prime * result + fHelpText.hashCode();
return result;
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!this.getClass().equals(obj.getClass())) {
return false;
}
TmfContentFieldAspect other = (TmfContentFieldAspect) obj;
if (!fAspectName.equals(other.fAspectName)) {
return false;
}
if (!Arrays.equals(fFieldPath, other.fFieldPath)) {
return false;
}
return (fHelpText.equals(other.fHelpText));
}
}