/** * Mad-Advertisement * Copyright (C) 2011 Thorsten Marx <thmarx@gmx.net> * * This program 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 3 of the License, or (at your option) any later * version. * * This program 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 * this program. If not, see <http://www.gnu.org/licenses/>. */ package net.mad.ads.server.utils.request; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.TimeZone; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import net.mad.ads.db.db.request.AdRequest; import net.mad.ads.db.enums.BannerFormat; import net.mad.ads.db.enums.BannerType; import net.mad.ads.db.enums.Day; import net.mad.ads.db.utils.geo.GeoLocation; import net.mad.ads.server.utils.RuntimeContext; import net.mad.ads.server.utils.context.AdContext; import net.mad.ads.server.utils.http.KeywordUtils; import net.mad.ads.services.geo.Location; /** * Helper zum erzeugen des AdRequest aus dem HttpRequest * * @author tmarx * */ public class RequestHelper { private static final Logger logger = LoggerFactory.getLogger(RequestHelper.class); public static final String format = "_p1"; public static final String type = "_p2"; public static final String offset = "_p3"; public static final String requestId = "_p4"; public static final String flash = "_p5"; public static final String slot = "_p6"; public static final String keywords = "_p7"; public static final String referrer = "_p8"; // public static final String hour = "_p3"; // public static final String minute = "_p4"; // public static final String day = "_p5"; // public static final String date_day = "_p6"; // public static final String date_month = "_p7"; // public static final String date_year = "_p8"; private static final Pattern integerPattern = Pattern.compile("^\\d+$"); public static AdRequest getAdRequest(AdContext context, HttpServletRequest request) { AdRequest adRequest = new AdRequest(); // TODO: Uhrzeit auf länge und Integer prüfen // Matcher matchesInteger = integerPattern.matcher (temp); // boolean isInteger = matchesInteger.matches (); try { String clientIp = request.getRemoteAddr(); Location loc = RuntimeContext.getIpDB().searchIp(clientIp); if (loc != null) { try { GeoLocation geo = new GeoLocation(Double.parseDouble(loc.getLatitude()), Double.parseDouble(loc.getLongitude())); adRequest.setGeoLocation(geo); } catch (NumberFormatException nfe) { // logger.error("", nfe); } } // Format String format = request.getParameter(RequestHelper.format); // Type String type = (String) request.getParameter(RequestHelper.type); adRequest.getFormats().add(BannerFormat.fromCompoundName(format)); adRequest.getTypes().add(BannerType.forType(Integer.valueOf(type))); adRequest.setKeywords(KeywordUtils.getKeywords(request)); if (context.getSlot() != null) { adRequest.setSite(context.getSlot().getSite()); adRequest.setAdSlot(context.getSlot().toString()); } addTimeCondition(request, adRequest); } catch (Exception e) { logger.error("", e); } return adRequest; } /* * Durch das übergebene Offset des Browsers können hier die Tageszeit und * das Datum gesetzt werden */ private static void addTimeCondition(HttpServletRequest request, AdRequest adRequest) { String strOffSet = request.getParameter(RequestHelper.offset); int offset = Integer.parseInt(strOffSet); offset = offset * 60000; String [] ids = TimeZone.getAvailableIDs(offset); Calendar temp = Calendar.getInstance(); temp.setTimeZone(TimeZone.getTimeZone(ids[0])); DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); DateFormat timeFormat = new SimpleDateFormat("HHmm"); // aktuelle Uhrzeit setzen adRequest.setTime(timeFormat.format(temp.getTime())); // aktuelles Datum setzen adRequest.setDate(dateFormat.format(temp.getTime())); // Tag der Woche setzten adRequest.setDay(Day.getDayForJava(temp.get(Calendar.DAY_OF_WEEK))); } }