package org.ovirt.engine.api.restapi.resource.aaa;
import javax.ws.rs.core.Response;
import org.ovirt.engine.api.model.SshPublicKey;
import org.ovirt.engine.api.resource.aaa.SshPublicKeyResource;
import org.ovirt.engine.api.restapi.resource.AbstractBackendSubResource;
import org.ovirt.engine.core.common.action.UserProfileParameters;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.UserProfile;
import org.ovirt.engine.core.common.queries.IdQueryParameters;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
public class BackendSSHPublicKeyResource
extends AbstractBackendSubResource<SshPublicKey, UserProfile>
implements SshPublicKeyResource {
private Guid userId;
private BackendSSHPublicKeysResource parent;
public BackendSSHPublicKeyResource(String id, Guid userId, BackendSSHPublicKeysResource parent) {
super(id, SshPublicKey.class, UserProfile.class);
this.userId = userId;
this.parent = parent;
}
@Override
public SshPublicKey get() {
return performGet(VdcQueryType.GetUserProfile, new IdQueryParameters(userId));
}
@Override
protected SshPublicKey addParents(SshPublicKey pubkey) {
return parent.addParents(pubkey);
}
@Override
public SshPublicKey update(SshPublicKey pubkey) {
return performUpdate(pubkey,
new QueryIdResolver<>(VdcQueryType.GetUserProfile, IdQueryParameters.class),
VdcActionType.UpdateUserProfile,
new UpdateParametersProvider());
}
public class UpdateParametersProvider implements ParametersProvider<SshPublicKey, UserProfile> {
@Override
public VdcActionParametersBase getParameters(SshPublicKey model, UserProfile entity) {
UserProfileParameters params = new UserProfileParameters();
UserProfile profile = map(model, entity);
profile.setUserId(userId);
if (Guid.isNullOrEmpty(profile.getSshPublicKeyId())) {
profile.setSshPublicKeyId(Guid.newGuid());
}
params.setUserProfile(profile);
return params;
}
}
@Override
public Response remove() {
// we cannot just remove UserProfile, because we'll wipe out unrelated fields.
// Instead, we just clear the public key fields.
UserProfile entity = getEntity(
UserProfile.class,
VdcQueryType.GetUserProfile,
new IdQueryParameters(userId),
userId.toString(),
true
);
entity.setSshPublicKeyId(Guid.Empty);
entity.setSshPublicKey("");
UserProfileParameters parameters = new UserProfileParameters();
parameters.setUserProfile(entity);
return performAction(VdcActionType.UpdateUserProfile, parameters);
}
}