001    /**
002     * Copyright 2005-2014 The Kuali Foundation
003     *
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.opensource.org/licenses/ecl2.php
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.rice.ksb.testclient1;
017    
018    import java.util.ArrayList;
019    import java.util.List;
020    import java.util.Map;
021    import java.util.concurrent.ConcurrentHashMap;
022    import java.util.concurrent.atomic.AtomicInteger;
023    
024    import org.apache.cxf.message.Message;
025    import org.apache.cxf.phase.PhaseInterceptorChain;
026    import org.kuali.rice.ksb.messaging.remotedservices.BaseballCard;
027    import org.kuali.rice.ksb.messaging.remotedservices.BaseballCardCollectionService;
028    import org.kuali.rice.ksb.messaging.remotedservices.ServiceCallInformationHolder;
029    
030    import javax.annotation.Resource;
031    import javax.ws.rs.core.Context;
032    import javax.ws.rs.core.HttpHeaders;
033    import javax.xml.ws.WebServiceContext;
034    
035    /**
036     * Implementation for {@link BaseballCardCollectionService}
037     * 
038     * @author Kuali Rice Team (rice.collab@kuali.org)
039     *
040     */
041    public class BaseballCardCollectionServiceImpl implements BaseballCardCollectionService {
042        // annotations on impl not supported by RESTServiceExporter/RestServiceDefinition
043        // @Context HttpHeaders headers;
044    
045        private Map<Integer, BaseballCard> cards = new ConcurrentHashMap<Integer, BaseballCard>();
046        private AtomicInteger nextId = new AtomicInteger(1);
047        
048        /**
049         * @see org.kuali.rice.ksb.messaging.remotedservices.BaseballCardCollectionService#add(org.kuali.rice.ksb.messaging.remotedservices.BaseballCard)
050         */
051        public Integer add(BaseballCard card) {
052            Integer result = null;
053            if (card != null) {
054                int id = nextId.addAndGet(1);
055                cards.put(id, card);
056                result = id;
057            }
058            return result;
059        }
060    
061        /**
062         * @see org.kuali.rice.ksb.messaging.remotedservices.BaseballCardCollectionService#delete(java.lang.Integer)
063         */
064        public void delete(Integer id) {
065            cards.remove(id);
066        }
067    
068        /**
069         * @see org.kuali.rice.ksb.messaging.remotedservices.BaseballCardCollectionService#get(java.lang.Integer)
070         */
071        public BaseballCard get(Integer id) {
072            return cards.get(id);
073        }
074    
075        /**
076         * @see org.kuali.rice.ksb.messaging.remotedservices.BaseballCardCollectionService#get(java.lang.String)
077         */
078        public List<BaseballCard> get(String playerName) {
079            List<BaseballCard> results = new ArrayList<BaseballCard>();
080            for (BaseballCard card : cards.values()) {
081                if (playerName.equals(card.getPlayerName())) results.add(card);
082            }
083            return results;
084        }
085    
086        /**
087         * @see org.kuali.rice.ksb.messaging.remotedservices.BaseballCardCollectionService#getAll()
088         */
089        public List<BaseballCard> getAll() {
090            // excuse me while we exploit this service to test service call version headers
091            // annotations on impl not supported by RESTServiceExporter/RestServiceDefinition
092            ServiceCallInformationHolder.multiValues = (Map<String, List<String>>)PhaseInterceptorChain.getCurrentMessage().get(Message.PROTOCOL_HEADERS);
093            return new ArrayList<BaseballCard>(cards.values());
094        }
095    
096        /**
097         * @see org.kuali.rice.ksb.messaging.remotedservices.BaseballCardCollectionService#update(java.lang.Integer, org.kuali.rice.ksb.messaging.remotedservices.BaseballCard)
098         */
099        public void update(Integer id, BaseballCard card) {
100            cards.put(id, card);
101        }
102        
103        /**
104         * This method lacks JAX-RS annotations in the {@link BaseballCardCollectionService} interface
105         * 
106         * @see org.kuali.rice.ksb.messaging.remotedservices.BaseballCardCollectionService#unannotatedMethod()
107         */
108        public void unannotatedMethod() {
109            // do nothing
110        }
111    
112    }