package com.sap.hana.cloud.samples.benefits.odata;
import static com.sap.hana.cloud.samples.benefits.odata.cfg.FunctionImportParameters.CAMPAIGN_ID;
import static com.sap.hana.cloud.samples.benefits.odata.cfg.FunctionImportParameters.PHOTO_TYPE;
import static com.sap.hana.cloud.samples.benefits.odata.cfg.FunctionImportParameters.USER_ID;
import java.io.IOException;
import java.util.*;
import org.apache.olingo.odata2.api.annotation.edm.*;
import org.apache.olingo.odata2.api.annotation.edm.EdmFunctionImport.HttpMethod;
import org.apache.olingo.odata2.api.annotation.edm.EdmFunctionImport.ReturnType;
import org.apache.olingo.odata2.api.annotation.edm.EdmFunctionImport.ReturnType.Type;
import com.sap.hana.cloud.samples.benefits.connectivity.ECAPIConnector;
import com.sap.hana.cloud.samples.benefits.connectivity.http.InvalidResponseException;
import com.sap.hana.cloud.samples.benefits.odata.beans.UserInfo;
import com.sap.hana.cloud.samples.benefits.odata.cfg.*;
import com.sap.hana.cloud.samples.benefits.persistence.UserPointsDAO;
import com.sap.hana.cloud.samples.benefits.persistence.model.*;
public class UserService extends ODataService {
@EdmFunctionImport(name = FunctionImportNames.MANAGED_USER_NAMES, entitySet = FunctionImportEntitySets.MANAGED_USER_NAMES, returnType = @ReturnType(type = Type.ENTITY, isCollection = true))
public List<User> getManagedUsers() {
User currentUser = getLoggedInSfUser();
return currentUser.getEmployees();
}
@EdmFunctionImport(name = FunctionImportNames.USER_INFO, entitySet = FunctionImportNames.USER_INFO, returnType = @ReturnType(type = Type.COMPLEX, isCollection = true))
public List<UserInfo> getInfoProfile() throws AppODataException {
User currentUser = getLoggedInSfUser();
UserInfo userInfo = new UserInfo();
UserInfo hrInfo = new UserInfo();
List<UserInfo> users = new ArrayList<>();
try {
userInfo = ECAPIConnector.getInstance().getUserInfoProfile(currentUser.getUserId());
users.add(userInfo);
if (currentUser.getHrManager() != null) {
hrInfo = ECAPIConnector.getInstance().getUserInfoProfile(currentUser.getHrManager().getUserId());
users.add(hrInfo);
}
} catch (IOException | InvalidResponseException ex) {
throw new AppODataException("Cannot get information about the user", ex); //$NON-NLS-1$
}
return users;
}
@EdmFunctionImport(name = FunctionImportNames.USER_PROFILE, entitySet = FunctionImportEntitySets.USER_PROFILE, returnType = @ReturnType(type = Type.ENTITY))
public User getUserProfile() {
User currentUser = getLoggedInSfUser();
return currentUser;
}
@EdmFunctionImport(name = FunctionImportNames.USER_PHOTO, returnType = @ReturnType(type = Type.SIMPLE, isCollection = false), httpMethod = HttpMethod.GET)
public String getUserPhoto(@EdmFunctionImportParameter(name = PHOTO_TYPE, type = EdmType.INT32) Integer photoType) throws AppODataException {
return getUserPhoto(getLoggedInSfUser().getUserId(), photoType);
}
@EdmFunctionImport(name = FunctionImportNames.HR_PHOTO, returnType = @ReturnType(type = Type.SIMPLE, isCollection = false), httpMethod = HttpMethod.GET)
public String getHrManagerPhoto(@EdmFunctionImportParameter(name = PHOTO_TYPE, type = EdmType.INT32) Integer photoType) throws AppODataException {
User hrManager = getLoggedInSfUser().getHrManager();
if (hrManager == null) {
return ""; //$NON-NLS-1$
}
return getUserPhoto(hrManager.getUserId(), photoType);
}
@EdmFunctionImport(name = FunctionImportNames.USER_POINTS, entitySet = FunctionImportEntitySets.USER_POINTS, returnType = @ReturnType(type = Type.ENTITY), httpMethod = HttpMethod.GET)
public UserPoints getCampaignUserPoints(@EdmFunctionImportParameter(name = CAMPAIGN_ID, type = EdmType.INT64) Long campaignId,
@EdmFunctionImportParameter(name = USER_ID, type = EdmType.STRING) String userId) {
User currentUser = getLoggedInSfUser();
if (UserManager.getIsUserAdmin() || currentUser.getUserId().equals(userId)) {
return new UserPointsDAO().getUserPoints(userId, campaignId);
}
throw new IllegalArgumentException("Missing user points for campaign wit id " + campaignId); //$NON-NLS-1$
}
private String getUserPhoto(String userId, int photoType) throws AppODataException {
try {
return ECAPIConnector.getInstance().getUserPhoto(userId, photoType);
} catch (IOException | InvalidResponseException ex) {
throw new AppODataException(String.format("Failed to get photo for user with id %s", userId), ex); //$NON-NLS-1$
}
}
}