/**
 * Copyright 2013 Carl-Philipp Harmant
 *
 * 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 fr.cph.stock.web.servlet.portfolio;

import java.util.Arrays;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang.math.NumberUtils;
import org.apache.log4j.Logger;

import fr.cph.stock.business.Business;
import fr.cph.stock.business.IBusiness;
import fr.cph.stock.entities.Equity;
import fr.cph.stock.entities.User;
import fr.cph.stock.exception.YahooException;
import fr.cph.stock.language.LanguageFactory;
import fr.cph.stock.web.servlet.CookieManagement;

/**
 * This servlet is called when the user want to modify an equity
 * 
 * @author Carl-Philipp Harmant
 * 
 */
@WebServlet(name = "ModifyEquityServlet", urlPatterns = { "/modifyequity" })
public class ModifyEquityServlet extends HttpServlet {

	/** Serialization **/
	private static final long serialVersionUID = 886732846315131952L;
	/** Logger **/
	private static final Logger LOG = Logger.getLogger(ModifyEquityServlet.class);
	/** Business **/
	private IBusiness business;

	@Override
	public final void init() {
		business = Business.getInstance();
	}

	@Override
	protected final void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException {
		try {
			if (request.getCharacterEncoding() == null) {
				request.setCharacterEncoding("UTF-8");
			}
			String lang = CookieManagement.getCookieLanguage(Arrays.asList(request.getCookies()));
			LanguageFactory language = LanguageFactory.getInstance();
			HttpSession session = request.getSession();
			User user = (User) session.getAttribute("user");
			Double quantity = null, unitCostPrice = null, stopLoss = null, objective = null, yieldPersonal = null, parityPersonal = null;
			String namePersonal = null, sectorPersonal = null, industryPersonal = null, marketCapPersonal = null;
			try {
				if (request.getParameter("delete") != null) {
					String id = request.getParameter("id");
					Equity e = new Equity();
					e.setid(Integer.parseInt(id));
					business.deleteEquity(e);
					request.setAttribute("modified", language.getLanguage(lang).get("CONSTANT_DELETED") + " !");
				} else {
					String ticker = request.getParameter("ticker");
					String namePerso = request.getParameter("namePersonal");
					if (!namePerso.equals("")) {
						namePersonal = namePerso;
					}
					String sectorPerso = request.getParameter("sectorPersonal");
					if (!sectorPerso.equals("")) {
						sectorPersonal = sectorPerso;
					}
					String industryPerso = request.getParameter("industryPersonal");
					if (!industryPerso.equals("")) {
						industryPersonal = industryPerso;
					}
					String marketCapPerso = request.getParameter("marketCapPersonal");
					if (!marketCapPerso.equals("")) {
						marketCapPersonal = marketCapPerso;
					}
					String quant = request.getParameter("quantity");
					if (!quant.equals("")) {
						quantity = NumberUtils.createDouble(quant);
					} else {
						quantity = 0.0;
					}
					String unitCostP = request.getParameter("unitCostPrice");
					if (!unitCostP.equals("")) {
						unitCostPrice = NumberUtils.createDouble(unitCostP);
					} else {
						unitCostPrice = 0.0;
					}
					String stopLo = request.getParameter("stopLoss");
					if (!stopLo.equals("")) {
						stopLoss = NumberUtils.createDouble(stopLo);
					}
					String objc = request.getParameter("objective");
					if (!objc.equals("")) {
						objective = NumberUtils.createDouble(objc);
					}
					String yieldPerso = request.getParameter("yieldPersonal");
					if (!yieldPerso.equals("")) {
						yieldPersonal = NumberUtils.createDouble(yieldPerso);
					}
					String parityPerso = request.getParameter("modifyParityPersonal");
					if (!parityPerso.equals("")) {
						parityPersonal = NumberUtils.createDouble(parityPerso);
					}
					if (quantity == 0 || unitCostPrice == 0) {
						request.setAttribute("modifyError", "Error: quantity and/or unit cost price can not be 0");
					} else {
						Equity equity = new Equity();
						equity.setNamePersonal(namePersonal);
						equity.setSectorPersonal(sectorPersonal);
						equity.setIndustryPersonal(industryPersonal);
						equity.setMarketCapPersonal(marketCapPersonal);
						equity.setQuantity(quantity);
						equity.setUnitCostPrice(unitCostPrice);
						equity.setStopLossLocal(stopLoss);
						equity.setObjectivLocal(objective);
						equity.setYieldPersonal(yieldPersonal);
						equity.setParityPersonal(parityPersonal);
						business.updateEquity(user.getId(), ticker, equity);
						request.setAttribute("modified", language.getLanguage(lang).get("CONSTANT_MODIFIED") + " !");
					}
				}
			} catch (YahooException e) {
				LOG.warn(e.getMessage(), e);
				request.setAttribute("modifyError", "Error: " + e.getMessage());
			} catch (NumberFormatException e) {
				LOG.warn(e.getMessage(), e);
				request.setAttribute("modifyError", "Error: " + e.getMessage());
			}
			request.getRequestDispatcher("home").forward(request, response);
		} catch (Throwable t) {
			LOG.error(t.getMessage(), t);
			throw new ServletException("Error: " + t.getMessage(), t);
		}
	}

	@Override
	protected final void doPost(final HttpServletRequest request, final HttpServletResponse response) throws ServletException {
		doGet(request, response);
	}
}

@@ -4577,30 +4577,8 @@
 y ==
- 0 %7C%7C unitCostPrice ==
  0) 

Allow unit net price to 0 when modifing an equity