use of org.eclipse.winery.model.tosca.HasType in project winery by eclipse.
the class IGenericRepository method getDefinitionsChildIdOfParent.
/**
* Determines the id of the parent in the inheritance hierarchy (if exists).
*
* @return the id of the parent class
*/
default Optional<DefinitionsChildId> getDefinitionsChildIdOfParent(HasInheritanceId id) {
final HasInheritance element = (HasInheritance) this.getDefinitions(id).getElement();
final HasType derivedFrom = element.getDerivedFrom();
QName derivedFromType = null;
if (derivedFrom != null) {
derivedFromType = derivedFrom.getTypeAsQName();
}
if (derivedFromType == null) {
return Optional.empty();
} else {
// Instantiate an id with the same class as the current id
DefinitionsChildId parentId;
Constructor<? extends DefinitionsChildId> constructor;
try {
constructor = id.getClass().getConstructor(QName.class);
} catch (NoSuchMethodException | SecurityException e1) {
throw new IllegalStateException("Could get constructor to instantiate parent id", e1);
}
try {
parentId = constructor.newInstance(derivedFromType);
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
throw new IllegalStateException("Could not instantiate id for parent", e);
}
return Optional.of(parentId);
}
}
use of org.eclipse.winery.model.tosca.HasType in project winery by eclipse.
the class AbstractComponentsWithTypeReferenceResource method onJsonPost.
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response onJsonPost(QNameWithTypeApiData jsonData) {
// only check for type parameter as namespace and name are checked in super.onPost
if (StringUtils.isEmpty(jsonData.type)) {
return Response.status(Status.BAD_REQUEST).build();
}
ResourceCreationResult creationResult = super.onPost(jsonData.namespace, jsonData.localname);
if (!creationResult.isSuccess()) {
return creationResult.getResponse();
}
if (creationResult.getStatus().equals(Status.CREATED)) {
final DefinitionsChildId id = (DefinitionsChildId) creationResult.getId();
final IRepository repository = RepositoryFactory.getRepository();
final Definitions definitions = repository.getDefinitions(id);
final TExtensibleElements element = definitions.getElement();
((HasType) element).setType(jsonData.type);
if (id instanceof EntityTemplateId) {
BackendUtils.initializeProperties(repository, (TEntityTemplate) element);
}
try {
BackendUtils.persist(id, definitions);
} catch (IOException e) {
throw new WebApplicationException(e);
}
}
return creationResult.getResponse();
}
Aggregations