nl.strohalm.cyclos.webservices.rest.AccessRestController.java Source code

Java tutorial

Introduction

Here is the source code for nl.strohalm.cyclos.webservices.rest.AccessRestController.java

Source

/*
   This file is part of Cyclos.
    
   Cyclos is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
    
   Cyclos is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
   GNU General Public License for more details.
    
   You should have received a copy of the GNU General Public License
   along with Cyclos; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    
 */
package nl.strohalm.cyclos.webservices.rest;

import java.text.DecimalFormatSymbols;
import java.util.List;

import nl.strohalm.cyclos.entities.access.Channel;
import nl.strohalm.cyclos.entities.access.Channel.Credentials;
import nl.strohalm.cyclos.entities.accounts.transactions.TransferType;
import nl.strohalm.cyclos.entities.accounts.transactions.TransferTypeQuery;
import nl.strohalm.cyclos.entities.groups.MemberGroup;
import nl.strohalm.cyclos.entities.settings.LocalSettings;
import nl.strohalm.cyclos.services.settings.SettingsService;
import nl.strohalm.cyclos.services.transfertypes.TransferTypeService;
import nl.strohalm.cyclos.utils.access.LoggedUser;
import nl.strohalm.cyclos.webservices.WebServiceContext;
import nl.strohalm.cyclos.webservices.model.MemberAccountVO;
import nl.strohalm.cyclos.webservices.model.MyProfileVO;
import nl.strohalm.cyclos.webservices.rest.TransferTypesRestController.Destination;
import nl.strohalm.cyclos.webservices.rest.TransferTypesRestController.TransferTypeSearchParams;

import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * Controller which handles /access paths
 * 
 * @author luis
 */
@Controller
public class AccessRestController extends BaseRestController {

    public static class InitialData {
        private MyProfileVO profile;
        private boolean requireTransactionPassword;
        private List<MemberAccountVO> accounts;
        private boolean canMakeMemberPayments;
        private boolean canMakeSystemPayments;
        private int decimalCount;
        private char decimalSeparator;

        public List<MemberAccountVO> getAccounts() {
            return accounts;
        }

        public int getDecimalCount() {
            return decimalCount;
        }

        public char getDecimalSeparator() {
            return decimalSeparator;
        }

        public MyProfileVO getProfile() {
            return profile;
        }

        public boolean isCanMakeMemberPayments() {
            return canMakeMemberPayments;
        }

        public boolean isCanMakeSystemPayments() {
            return canMakeSystemPayments;
        }

        public boolean isRequireTransactionPassword() {
            return requireTransactionPassword;
        }

        public void setAccounts(final List<MemberAccountVO> accounts) {
            this.accounts = accounts;
        }

        public void setCanMakeMemberPayments(final boolean canMakeMemberPayments) {
            this.canMakeMemberPayments = canMakeMemberPayments;
        }

        public void setCanMakeSystemPayments(final boolean canMakeSystemPayments) {
            this.canMakeSystemPayments = canMakeSystemPayments;
        }

        public void setDecimalCount(final int decimalCount) {
            this.decimalCount = decimalCount;
        }

        public void setDecimalSeparator(final char decimalSeparator) {
            this.decimalSeparator = decimalSeparator;
        }

        public void setProfile(final MyProfileVO profile) {
            this.profile = profile;
        }

        public void setRequireTransactionPassword(final boolean requireTransactionPassword) {
            this.requireTransactionPassword = requireTransactionPassword;
        }

        @Override
        public String toString() {
            return "InitialData [profile=" + profile + ", requireTransactionPassword=" + requireTransactionPassword
                    + ", accounts=" + accounts + ", canMakeMemberPayments=" + canMakeMemberPayments
                    + ", canMakeSystemPayments=" + canMakeSystemPayments + ", decimalCount=" + decimalCount
                    + ", decimalSeparator=" + decimalSeparator + "]";
        }

    }

    private MembersRestController membersRestController;
    private AccountsRestController accountsRestController;
    private TransferTypeService transferTypeService;
    private SettingsService settingsService;
    private TransferTypesRestController transferTypesRestController;

    /**
     * Returns general data about the authenticated user
     */
    @RequestMapping(value = "access/initialData", method = RequestMethod.GET)
    @ResponseBody
    public InitialData getInitialData() {
        InitialData data = new InitialData();
        data.setProfile(membersRestController.getMyProfile());
        data.setAccounts(accountsRestController.listAccounts());
        data.setRequireTransactionPassword(isRequireTransactionPassword());

        // Can make payment to member or to system
        TransferTypeSearchParams params = new TransferTypeSearchParams();
        params.setDestination(Destination.MEMBER);
        TransferTypeQuery query = transferTypesRestController.toTransferTypeQuery(params);
        List<TransferType> toMemberTTs = transferTypeService.search(query);
        // Remove the self payments
        for (TransferType tt : toMemberTTs) {
            if (tt.getContext().isSelfPayment()) {
                toMemberTTs.remove(tt);
            }
        }
        params.setDestination(Destination.SYSTEM);
        query = transferTypesRestController.toTransferTypeQuery(params);
        List<TransferType> toSystemTTs = transferTypeService.search(query);
        data.setCanMakeMemberPayments(CollectionUtils.isNotEmpty(toMemberTTs));
        data.setCanMakeSystemPayments(CollectionUtils.isNotEmpty(toSystemTTs));

        // Local settings
        final LocalSettings localSettings = settingsService.getLocalSettings();
        data.setDecimalCount(localSettings.getPrecision().getValue());
        data.setDecimalSeparator(
                new DecimalFormatSymbols(localSettings.getNumberLocale().getLocale()).getDecimalSeparator());
        return data;
    }

    @RequestMapping(value = "access/requireTransactionPassword", method = RequestMethod.GET)
    @ResponseBody
    public boolean isRequireTransactionPassword() {
        Channel channel = WebServiceContext.getChannel();
        // Only the default credentials require an extra transaction password
        if (channel.getCredentials() != Credentials.DEFAULT) {
            return false;
        }

        MemberGroup group = LoggedUser.group();
        return group.getBasicSettings().getTransactionPassword().isUsed();
    }

    public void setAccountsRestController(final AccountsRestController accountsRestController) {
        this.accountsRestController = accountsRestController;
    }

    public void setMembersRestController(final MembersRestController membersRestController) {
        this.membersRestController = membersRestController;
    }

    public void setSettingsService(final SettingsService settingsService) {
        this.settingsService = settingsService;
    }

    public void setTransferTypeService(final TransferTypeService transferTypeService) {
        this.transferTypeService = transferTypeService;
    }

    public void setTransferTypesRestController(final TransferTypesRestController transferTypesRestController) {
        this.transferTypesRestController = transferTypesRestController;
    }

}