package org.xcolab.client.sharedcolab; import org.xcolab.client.admin.enums.ConfigurationAttributeKey; import org.xcolab.client.sharedcolab.exceptions.MemberNotFoundException; import org.xcolab.client.sharedcolab.pojo.Member; import org.xcolab.client.sharedcolab.pojo.SharedContest; import org.xcolab.util.clients.CoLabService; import org.xcolab.util.http.ServiceRequestUtils; import org.xcolab.util.http.client.RefreshingRestService; import org.xcolab.util.http.client.RestResource; import org.xcolab.util.http.client.RestResource1; import org.xcolab.util.http.client.RestService; import org.xcolab.util.http.client.ServiceResource; import org.xcolab.util.http.client.ServiceResource1; import java.util.List; public class SharedColabClient { private static final RestService sharedColabService; static { sharedColabService = new RefreshingRestService(CoLabService.SHARED, ConfigurationAttributeKey.SHARED_COLAB_NAMESPACE .withDefaultValue(ServiceRequestUtils.getNamespace()) ); } private static final RestService partnerMemberService = new RefreshingRestService(CoLabService.MEMBER, ConfigurationAttributeKey.PARTNER_COLAB_NAMESPACE ); private static final RestResource<Member, Long> partnerMemberResource = new RestResource1<>( partnerMemberService, "members", Member.TYPES); private static final RestResource<SharedContest, Long> sharedContestResource = new RestResource1<>( sharedColabService, "contests", SharedContest.TYPES); private static final ServiceResource sharedColabResource = new ServiceResource1( sharedColabService, "members"); public static boolean isScreenNameUsed(String screenName) { return sharedColabResource.service("isUsed", Boolean.class) .queryParam("screenName", screenName) .get(); } public static boolean isEmailUsed(String email) { return sharedColabResource.service("isUsed", Boolean.class) .queryParam("email", email) .get(); } public static Long retrieveSharedId(String email, String screenName, String colabName) { return sharedColabResource.service("retrieveSharedId", Long.class) .queryParam("email", email) .queryParam("screenName", screenName) .queryParam("colabOrigin", colabName) .post(); } public static void updateSharedContestName(Long sharedContestId, String sharedContestName) { sharedContestResource.service(sharedContestId,"updateSharedContestName", Boolean.class) .queryParam("sharedContestName", sharedContestName) .put(); } public static Long retrieveContestSharedId(String sharedContestName, String colabName) { return sharedContestResource.service("retrieveSharedId", Long.class) .queryParam("sharedContestName", sharedContestName) .queryParam("colabOrigin", colabName) .post(); } public static List<SharedContest> retrieveContestsFromForeignColab(String colabOrigin) { return sharedContestResource.list() .optionalQueryParam("colabOrigin", colabOrigin) .execute(); } public static Member findMemberByScreenName(String screenName) throws MemberNotFoundException { final Member member = partnerMemberResource.list() .queryParam("screenName", screenName) .executeWithResult() .getFirstIfExists(); if (member == null) { throw new MemberNotFoundException( "Member with screenName " + screenName + " does not exist"); } return member; } public static Member registerInPartnerColab(Member member) { return partnerMemberResource.service("registerFromSharedColab", Member.class) .post(member); } public static boolean validatePassword(String password, long memberId) { return partnerMemberResource.service("validatePassword", Boolean.class) .queryParam("password", password) .queryParam("memberId", memberId) .get(); } }