/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.glesys.features;
import javax.inject.Named;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import org.jclouds.Fallbacks.EmptyFluentIterableOnNotFoundOr404;
import org.jclouds.Fallbacks.NullOnNotFoundOr404;
import org.jclouds.Fallbacks.TrueOnNotFoundOr404;
import org.jclouds.glesys.domain.EmailAccount;
import org.jclouds.glesys.domain.EmailAlias;
import org.jclouds.glesys.domain.EmailOverview;
import org.jclouds.glesys.options.CreateAccountOptions;
import org.jclouds.glesys.options.UpdateAccountOptions;
import org.jclouds.http.filters.BasicAuthentication;
import org.jclouds.rest.annotations.Fallback;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.SelectJson;
import com.google.common.collect.FluentIterable;
import com.google.common.util.concurrent.ListenableFuture;
/**
* Provides asynchronous access to E-Mail data via the Glesys REST API.
* <p/>
*
* @author Adam Lowe
* @see org.jclouds.glesys.features.EmailAccountApi
* @see <a href="https://github.com/GleSYS/API/wiki/API-Documentation" />
*/
@RequestFilters(BasicAuthentication.class)
public interface EmailAccountAsyncApi {
/**
* @see org.jclouds.glesys.features.EmailAccountApi#getOverview
*/
@Named("email:overview")
@POST
@Path("/email/overview/format/json")
@SelectJson("overview")
@Consumes(MediaType.APPLICATION_JSON)
@Fallback(NullOnNotFoundOr404.class)
ListenableFuture<EmailOverview> getOverview();
/**
* @see org.jclouds.glesys.features.EmailAccountApi#listDomain
*/
@Named("email:list:accounts")
@POST
@Path("/email/list/format/json")
@SelectJson("emailaccounts")
@Consumes(MediaType.APPLICATION_JSON)
@Fallback(EmptyFluentIterableOnNotFoundOr404.class)
ListenableFuture<FluentIterable<EmailAccount>> listDomain(@FormParam("domainname") String domain);
/**
* @see org.jclouds.glesys.features.EmailAccountApi#listAliasesInDomain
*/
@Named("email:list:aliases")
@POST
@Path("/email/list/format/json")
@SelectJson("emailaliases")
@Consumes(MediaType.APPLICATION_JSON)
@Fallback(EmptyFluentIterableOnNotFoundOr404.class)
ListenableFuture<FluentIterable<EmailAlias>> listAliasesInDomain(@FormParam("domainname") String domain);
/**
* @see org.jclouds.glesys.features.EmailAccountApi#createWithPassword
*/
@Named("email:createaccount")
@POST
@Consumes(MediaType.APPLICATION_JSON)
@SelectJson("emailaccount")
@Path("/email/createaccount/format/json")
ListenableFuture<EmailAccount> createWithPassword(@FormParam("emailaccount") String accountAddress, @FormParam("password") String password, CreateAccountOptions... options);
/**
* @see org.jclouds.glesys.features.EmailAccountApi#createAlias
*/
@Named("email:createalias")
@POST
@Consumes(MediaType.APPLICATION_JSON)
@SelectJson("alias")
@Path("/email/createalias/format/json")
ListenableFuture<EmailAlias> createAlias(@FormParam("emailalias") String aliasAddress, @FormParam("goto") String toEmailAddress);
/**
* @see org.jclouds.glesys.features.EmailAccountApi#update
*/
@Named("email:editaccount")
@POST
@Consumes(MediaType.APPLICATION_JSON)
@SelectJson("emailaccount")
@Path("/email/editaccount/format/json")
ListenableFuture<EmailAccount> update(@FormParam("emailaccount") String accountAddress, UpdateAccountOptions... options);
/**
* @see org.jclouds.glesys.features.EmailAccountApi#updateAlias
*/
@Named("email:editalias")
@POST
@Consumes(MediaType.APPLICATION_JSON)
@SelectJson("alias")
@Path("/email/editalias/format/json")
ListenableFuture<EmailAlias> updateAlias(@FormParam("emailalias") String aliasAddress, @FormParam("goto") String toEmailAddress);
/**
* @see org.jclouds.glesys.features.EmailAccountApi#delete
*/
@Named("email:delete")
@POST
@Path("/email/delete/format/json")
@Fallback(TrueOnNotFoundOr404.class)
ListenableFuture<Boolean> delete(@FormParam("email") String accountAddress);
}