// Path: src/main/java/ch/rasc/s4ws/portfolio/Portfolio.java
// public class Portfolio {
// 
// 	private final Map<String, PortfolioPosition> positionLookup = new LinkedHashMap<>();
// 
// 	public List<PortfolioPosition> getPositions() {
// 		return new ArrayList<>(this.positionLookup.values());
// 	}
// 
// 	public void addPosition(PortfolioPosition position) {
// 		this.positionLookup.put(position.getTicker(), position);
// 	}
// 
// 	public PortfolioPosition getPortfolioPosition(String ticker) {
// 		return this.positionLookup.get(ticker);
// 	}
// 
// 	/**
// 	 * @return the updated position or null
// 	 */
// 	public PortfolioPosition buy(String ticker, int sharesToBuy) {
// 		PortfolioPosition position = this.positionLookup.get(ticker);
// 		if (position == null || sharesToBuy < 1) {
// 			return null;
// 		}
// 		position = new PortfolioPosition(position, sharesToBuy);
// 		this.positionLookup.put(ticker, position);
// 		return position;
// 	}
// 
// 	/**
// 	 * @return the updated position or null
// 	 */
// 	public PortfolioPosition sell(String ticker, int sharesToSell) {
// 		PortfolioPosition position = this.positionLookup.get(ticker);
// 		if (position == null || sharesToSell < 1 || position.getShares() < sharesToSell) {
// 			return null;
// 		}
// 		position = new PortfolioPosition(position, -sharesToSell);
// 		this.positionLookup.put(ticker, position);
// 		return position;
// 	}
// 
// }
// 
// Path: src/main/java/ch/rasc/s4ws/portfolio/PortfolioPosition.java
// public class PortfolioPosition {
// 
// 	private final String company;
// 
// 	private final String ticker;
// 
// 	private final double price;
// 
// 	private final int shares;
// 
// 	private final long updateTime;
// 
// 	public PortfolioPosition(String company, String ticker, double price, int shares) {
// 		this.company = company;
// 		this.ticker = ticker;
// 		this.price = price;
// 		this.shares = shares;
// 		this.updateTime = System.currentTimeMillis();
// 	}
// 
// 	public PortfolioPosition(PortfolioPosition other, int sharesToAddOrSubtract) {
// 		this.company = other.company;
// 		this.ticker = other.ticker;
// 		this.price = other.price;
// 		this.shares = other.shares + sharesToAddOrSubtract;
// 		this.updateTime = System.currentTimeMillis();
// 	}
// 
// 	public String getCompany() {
// 		return this.company;
// 	}
// 
// 	public String getTicker() {
// 		return this.ticker;
// 	}
// 
// 	public double getPrice() {
// 		return this.price;
// 	}
// 
// 	public int getShares() {
// 		return this.shares;
// 	}
// 
// 	public long getUpdateTime() {
// 		return this.updateTime;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "PortfolioPosition [company=" + this.company + ", ticker=" + this.ticker
// 				+ ", price=" + this.price + ", shares=" + this.shares + "]";
// 	}
// 
// }


import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Service;
import ch.rasc.s4ws.portfolio.Portfolio;
import ch.rasc.s4ws.portfolio.PortfolioPosition;
/*
 * Copyright 2002-2013 the original author or authors.
 *
 * Licensed 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 ch.rasc.s4ws.portfolio.service;




/**
 * @author Rob Winch
 */
@Service
public class PortfolioServiceImpl implements PortfolioService {

	// user -> Portfolio
	private final Map<String, Portfolio> portfolioLookup = new HashMap<>();

	public PortfolioServiceImpl() {

		Portfolio portfolio = new Portfolio();
		portfolio.addPosition(
// Path: src/main/java/ch/rasc/s4ws/portfolio/Portfolio.java
// public class Portfolio {
// 
// 	private final Map<String, PortfolioPosition> positionLookup = new LinkedHashMap<>();
// 
// 	public List<PortfolioPosition> getPositions() {
// 		return new ArrayList<>(this.positionLookup.values());
// 	}
// 
// 	public void addPosition(PortfolioPosition position) {
// 		this.positionLookup.put(position.getTicker(), position);
// 	}
// 
// 	public PortfolioPosition getPortfolioPosition(String ticker) {
// 		return this.positionLookup.get(ticker);
// 	}
// 
// 	/**
// 	 * @return the updated position or null
// 	 */
// 	public PortfolioPosition buy(String ticker, int sharesToBuy) {
// 		PortfolioPosition position = this.positionLookup.get(ticker);
// 		if (position == null || sharesToBuy < 1) {
// 			return null;
// 		}
// 		position = new PortfolioPosition(position, sharesToBuy);
// 		this.positionLookup.put(ticker, position);
// 		return position;
// 	}
// 
// 	/**
// 	 * @return the updated position or null
// 	 */
// 	public PortfolioPosition sell(String ticker, int sharesToSell) {
// 		PortfolioPosition position = this.positionLookup.get(ticker);
// 		if (position == null || sharesToSell < 1 || position.getShares() < sharesToSell) {
// 			return null;
// 		}
// 		position = new PortfolioPosition(position, -sharesToSell);
// 		this.positionLookup.put(ticker, position);
// 		return position;
// 	}
// 
// }
// 
// Path: src/main/java/ch/rasc/s4ws/portfolio/PortfolioPosition.java
// public class PortfolioPosition {
// 
// 	private final String company;
// 
// 	private final String ticker;
// 
// 	private final double price;
// 
// 	private final int shares;
// 
// 	private final long updateTime;
// 
// 	public PortfolioPosition(String company, String ticker, double price, int shares) {
// 		this.company = company;
// 		this.ticker = ticker;
// 		this.price = price;
// 		this.shares = shares;
// 		this.updateTime = System.currentTimeMillis();
// 	}
// 
// 	public PortfolioPosition(PortfolioPosition other, int sharesToAddOrSubtract) {
// 		this.company = other.company;
// 		this.ticker = other.ticker;
// 		this.price = other.price;
// 		this.shares = other.shares + sharesToAddOrSubtract;
// 		this.updateTime = System.currentTimeMillis();
// 	}
// 
// 	public String getCompany() {
// 		return this.company;
// 	}
// 
// 	public String getTicker() {
// 		return this.ticker;
// 	}
// 
// 	public double getPrice() {
// 		return this.price;
// 	}
// 
// 	public int getShares() {
// 		return this.shares;
// 	}
// 
// 	public long getUpdateTime() {
// 		return this.updateTime;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "PortfolioPosition [company=" + this.company + ", ticker=" + this.ticker
// 				+ ", price=" + this.price + ", shares=" + this.shares + "]";
// 	}
// 
// }


// Path: src/main/java/ch/rasc/s4ws/portfolio/service/PortfolioServiceImpl.java
import java.util.HashMap;
import java.util.Map;
import org.springframework.stereotype.Service;
import ch.rasc.s4ws.portfolio.Portfolio;
import ch.rasc.s4ws.portfolio.PortfolioPosition;

/*
 * Copyright 2002-2013 the original author or authors.
 *
 * Licensed 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 ch.rasc.s4ws.portfolio.service;




/**
 * @author Rob Winch
 */
@Service
public class PortfolioServiceImpl implements PortfolioService {

	// user -> Portfolio
	private final Map<String, Portfolio> portfolioLookup = new HashMap<>();

	public PortfolioServiceImpl() {

		Portfolio portfolio = new Portfolio();
		portfolio.addPosition(
				new PortfolioPosition("Citrix Systems, Inc.", "CTXS", 24.30, 75));