
com.sap.cds.reflect.impl.CdsAnnotatableImpl Maven / Gradle / Ivy
/*******************************************************************
* © 2020 SAP SE or an SAP affiliate company. All rights reserved. *
*******************************************************************/
package com.sap.cds.reflect.impl;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Stream;
import com.sap.cds.reflect.CdsAnnotatable;
import com.sap.cds.reflect.CdsAnnotation;
public abstract class CdsAnnotatableImpl implements CdsAnnotatable {
private final Map> annotations = new HashMap<>();
protected CdsAnnotatableImpl(Collection> annotations) {
annotations.forEach(a -> this.annotations.put(a.getName(), a));
}
@Override
public Stream> annotations() {
return annotations.values().stream();
}
@SuppressWarnings("unchecked")
public Optional> findAnnotation(String name) {
return Optional.ofNullable((CdsAnnotation) annotations.get(removeAt(name)));
}
private static String removeAt(String name) {
if (name.startsWith("@")) {
name = name.substring(1);
}
return name;
}
public static class CdsAnnotationImpl implements CdsAnnotation {
private final String name;
private final T value;
private CdsAnnotationImpl(String name, T value) {
this.name = name;
this.value = value;
}
public static CdsAnnotation annotation(String name, T value) {
return new CdsAnnotationImpl<>(removeAt(name), value);
}
@Override
public String getName() {
return name;
}
@Override
public T getValue() {
return value;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy