/** * Fetches profile using Data API. */ private ProfileResponse fetchProfiles(ProfileRequest profileRequest, ParticipantId user) { if (LOG.isLoggable(Level.FINE)) { LOG.fine("Fetching profiles: " + Joiner.on(",").join(profileRequest.getAddressesList())); } FetchProfilesResult profileResult = fetchProfilesFromService(user, profileRequest.getAddressesList()); LOG.fine("Fetched profiles: " + profileResult.getProfiles().size()); return serializeProfileResult(profileResult); }
@Override public void execute(OperationRequest operation, OperationContext context, ParticipantId participant) throws InvalidRequestException { FetchProfilesRequest request = OperationUtil.getRequiredParameter(operation, ParamsProperty.FETCH_PROFILES_REQUEST); List<String> requestAddresses = request.getParticipantIds(); List<ParticipantProfile> profiles = Lists.newArrayListWithCapacity(requestAddresses.size()); for (String address : requestAddresses) { ParticipantProfile participantProfile = profilesFetcher.fetchProfile(address); profiles.add(participantProfile); } FetchProfilesResult result = new FetchProfilesResult(profiles); Map<ParamsProperty, Object> data = ImmutableMap.<ParamsProperty, Object> of(ParamsProperty.FETCH_PROFILES_RESULT, result); context.constructResponse(operation, data); } }
@SuppressWarnings("unchecked") @Override public boolean matches(Object item) { Map<ParamsProperty, Object> map = (Map<ParamsProperty, Object>) item; assertTrue(map.containsKey(ParamsProperty.FETCH_PROFILES_RESULT)); Object resultsObj = map.get(ParamsProperty.FETCH_PROFILES_RESULT); FetchProfilesResult results = (FetchProfilesResult) resultsObj; assertNotNull(results.getProfiles()); assertEquals(1, results.getProfiles().size()); ParticipantProfile profile = results.getProfiles().get(0); assertEquals(address, profile.getAddress()); assertEquals(name, profile.getName()); assertEquals(profileUrl, profile.getProfileUrl()); assertEquals(imageUrl, profile.getImageUrl()); return true; }
@SuppressWarnings("unchecked") @Override public boolean matches(Object item) { Map<ParamsProperty, Object> map = (Map<ParamsProperty, Object>) item; assertTrue(map.containsKey(ParamsProperty.FETCH_PROFILES_RESULT)); Object resultsObj = map.get(ParamsProperty.FETCH_PROFILES_RESULT); FetchProfilesResult results = (FetchProfilesResult) resultsObj; assertNotNull(results.getProfiles()); assertEquals(1, results.getProfiles().size()); ParticipantProfile profile = results.getProfiles().get(0); assertEquals(address, profile.getAddress()); assertEquals(name, profile.getName()); assertEquals(profileUrl, profile.getProfileUrl()); assertEquals(imageUrl, profile.getImageUrl()); return true; }
/** * Constructs ProfileResponse which is a protobuf generated class from the * output of Data API profile service. ProfileResponse contains the same * information as profileResult. * * @param profileResult the profile results with digests. * @return ProfileResponse */ private static ProfileResponse serializeProfileResult(FetchProfilesResult profileResult) { ProfileResponse.Builder builder = ProfileResponse.newBuilder(); for (ParticipantProfile participantProfile : profileResult.getProfiles()) { ProfileResponse.FetchedProfile fetchedProfile = ProfileResponse.FetchedProfile.newBuilder().setAddress(participantProfile.getAddress()) .setImageUrl(participantProfile.getImageUrl()) .setName(participantProfile.getName()) .setProfileUrl(participantProfile.getProfileUrl()).build(); builder.addProfiles(fetchedProfile); } return builder.build(); }