/** * 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.base.api.importer.reader; import java.util.List; import org.jdom.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import net.mad.ads.db.AdDBConstants; import net.mad.ads.db.definition.AdSlot; import net.mad.ads.db.definition.BannerDefinition; import net.mad.ads.db.definition.KeyValue; import net.mad.ads.db.definition.Keyword; import net.mad.ads.db.definition.condition.AdSlotConditionDefinition; import net.mad.ads.db.definition.condition.ClickExpirationConditionDefinition; import net.mad.ads.db.definition.condition.CountryConditionDefinition; import net.mad.ads.db.definition.condition.DateConditionDefinition; import net.mad.ads.db.definition.condition.DayConditionDefinition; import net.mad.ads.db.definition.condition.DistanceConditionDefinition; import net.mad.ads.db.definition.condition.ExcludeSiteConditionDefinition; import net.mad.ads.db.definition.condition.KeyValueConditionDefinition; import net.mad.ads.db.definition.condition.KeywordConditionDefinition; import net.mad.ads.db.definition.condition.SiteConditionDefinition; import net.mad.ads.db.definition.condition.StateConditionDefinition; import net.mad.ads.db.definition.condition.TimeConditionDefinition; import net.mad.ads.db.definition.condition.ViewExpirationConditionDefinition; import net.mad.ads.db.enums.ConditionDefinitions; import net.mad.ads.db.enums.Country; import net.mad.ads.db.enums.Day; import net.mad.ads.db.enums.ExpirationResolution; import net.mad.ads.db.enums.State; import net.mad.ads.db.utils.geo.GeoLocation; public class ConditionReader { private static final Logger logger = LoggerFactory.getLogger(ConditionReader.class); public static BannerDefinition processConditions (BannerDefinition definition, Element conditions) { if (conditions == null || conditions.getChildren() == null || conditions.getChildren().size() == 0) { DateConditionDefinition dateDef = new DateConditionDefinition(); dateDef.addPeriod(null, null); definition.addConditionDefinition(ConditionDefinitions.DATE, dateDef); TimeConditionDefinition tdef = new TimeConditionDefinition(); // tdef.setFrom(AdDBConstants.ADDB_BANNER_TIME_ALL); // tdef.setTo(AdDBConstants.ADDB_BANNER_TIME_ALL); tdef.getPeriods().add(TimeConditionDefinition.ALL_TIMES); definition.addConditionDefinition(ConditionDefinitions.TIME, tdef); DayConditionDefinition ddef = new DayConditionDefinition(); ddef.addDay(Day.All); definition.addConditionDefinition(ConditionDefinitions.DAY, ddef); StateConditionDefinition stDef = new StateConditionDefinition(); stDef.addState(State.All); definition.addConditionDefinition(ConditionDefinitions.STATE, stDef); CountryConditionDefinition cdef = new CountryConditionDefinition(); cdef.addCountry(Country.ALL); definition.addConditionDefinition(ConditionDefinitions.COUNTRY, cdef); // keine Keyword Einschwänkung für dieses Banner Keyword kw = new Keyword(AdDBConstants.ADDB_BANNER_KEYWORD_ALL); KeywordConditionDefinition kdef = new KeywordConditionDefinition(); kdef.addKeyword(kw); definition.addConditionDefinition(ConditionDefinitions.KEYWORD, kdef); // Banner soll auf allen Seiten angezeeit werden SiteConditionDefinition sdef = new SiteConditionDefinition(); sdef.addSite(AdDBConstants.ADDB_BANNER_SITE_ALL); definition.addConditionDefinition(ConditionDefinitions.SITE, sdef); AdSlotConditionDefinition adsdef = new AdSlotConditionDefinition(); definition.addConditionDefinition(ConditionDefinitions.ADSLOT, adsdef); } else { Element elem = conditions.getChild("time"); if (elem != null) { TimeConditionDefinition tdef = new TimeConditionDefinition(); // tdef.setTo(AdDBConstants.ADDB_BANNER_TIME_ALL); Element periods = elem.getChild("periods"); if (periods != null) { List<Element> periodsListe = periods.getChildren("period"); for (Element perion : periodsListe) { TimeConditionDefinition.Period timep = new TimeConditionDefinition.Period(); if (perion.getChild("from") != null) { timep.setFrom(elem.getChildText("from")); } else { timep.setFrom(AdDBConstants.ADDB_BANNER_TIME_ALL); } if (perion.getChild("to") != null) { timep.setTo(elem.getChildText("to")); } else { timep.setTo(AdDBConstants.ADDB_BANNER_TIME_ALL); } tdef.getPeriods().add(timep); } } definition.addConditionDefinition(ConditionDefinitions.TIME, tdef); } else { TimeConditionDefinition tdef = new TimeConditionDefinition(); // tdef.setFrom(AdDBConstants.ADDB_BANNER_TIME_ALL); // tdef.setTo(AdDBConstants.ADDB_BANNER_TIME_ALL); tdef.getPeriods().add(TimeConditionDefinition.ALL_TIMES); definition.addConditionDefinition(ConditionDefinitions.TIME, tdef); } elem = conditions.getChild("date"); if (elem != null) { DateConditionDefinition dateDef = new DateConditionDefinition(); Element periods = elem.getChild("periods"); if (periods != null) { List<Element> periodsListe = periods.getChildren("period"); for (Element perion : periodsListe) { DateConditionDefinition.Period timep = new DateConditionDefinition.Period(); if (perion.getChild("from") != null) { timep.setFrom(elem.getChildText("from")); } else { timep.setFrom(AdDBConstants.ADDB_BANNER_DATE_ALL); } if (perion.getChild("to") != null) { timep.setTo(elem.getChildText("to")); } else { timep.setTo(AdDBConstants.ADDB_BANNER_DATE_ALL); } dateDef.getPeriods().add(timep); } } definition.addConditionDefinition(ConditionDefinitions.DATE, dateDef); } else { DateConditionDefinition dateDef = new DateConditionDefinition(); dateDef.addPeriod(null, null); definition.addConditionDefinition(ConditionDefinitions.DATE, dateDef); } elem = conditions.getChild("days"); if (elem != null) { List<Element> childs = elem.getChildren(); if (childs != null) { DayConditionDefinition ddef = new DayConditionDefinition(); for (Element e : childs) { String text = e.getTextTrim(); try { Day d = Day.getDayForInt(Integer.valueOf(text)); ddef.addDay(d); } catch (Exception ex) { logger.error("", e); } } definition.addConditionDefinition(ConditionDefinitions.DAY, ddef); } } else { DayConditionDefinition ddef = new DayConditionDefinition(); ddef.addDay(Day.All); definition.addConditionDefinition(ConditionDefinitions.DAY, ddef); } elem = conditions.getChild("states"); if (elem != null) { List<Element> childs = elem.getChildren(); if (childs != null) { StateConditionDefinition stDef = new StateConditionDefinition(); for (Element e : childs) { String text = e.getTextTrim(); try { State s = State.getStateForInt(Integer.valueOf(text)); stDef.addState(s); } catch (Exception ex) { logger.error("", e); } } definition.addConditionDefinition(ConditionDefinitions.STATE, stDef); } } else { StateConditionDefinition stDef = new StateConditionDefinition(); stDef.addState(State.All); definition.addConditionDefinition(ConditionDefinitions.STATE, stDef); } elem = conditions.getChild("countries"); if (elem != null) { List<Element> childs = elem.getChildren(); if (childs != null) { CountryConditionDefinition cdef = new CountryConditionDefinition(); for (Element e : childs) { String text = e.getTextTrim(); try { Country c = Country.getCountryForString(text); cdef.addCountry(c); } catch (Exception ex) { logger.error("", e); } } definition.addConditionDefinition(ConditionDefinitions.COUNTRY, cdef); } } else { CountryConditionDefinition cdef = new CountryConditionDefinition(); cdef.addCountry(Country.ALL); definition.addConditionDefinition(ConditionDefinitions.COUNTRY, cdef); } // Adslots elem = conditions.getChild("slots"); if (elem != null) { List<Element> childs = elem.getChildren("slot"); if (childs != null) { AdSlotConditionDefinition stDef = new AdSlotConditionDefinition(); for (Element e : childs) { String text = e.getTextTrim(); try { stDef.addSlots(AdSlot.fromString(text)); } catch (Exception ex) { logger.error("", e); } } definition.addConditionDefinition(ConditionDefinitions.ADSLOT, stDef); } } else { definition.addConditionDefinition(ConditionDefinitions.ADSLOT, new AdSlotConditionDefinition()); } elem = conditions.getChild("keywords"); if (elem != null) { List<Element> childs = elem.getChildren("kw"); if (childs != null) { KeywordConditionDefinition kdef = new KeywordConditionDefinition(); for (Element e : childs) { String text = e.getTextTrim(); try { Keyword kw = new Keyword(text); kdef.addKeyword(kw); } catch (Exception ex) { ex.printStackTrace(); } } definition.addConditionDefinition(ConditionDefinitions.KEYWORD, kdef); } } else { Keyword kw = new Keyword(AdDBConstants.ADDB_BANNER_KEYWORD_ALL); KeywordConditionDefinition kdef = new KeywordConditionDefinition(); kdef.addKeyword(kw); definition.addConditionDefinition(ConditionDefinitions.KEYWORD, kdef); } elem = conditions.getChild("keyvalues"); if (elem != null) { List<Element> childs = elem.getChildren("kv"); if (childs != null) { KeyValueConditionDefinition kdef = new KeyValueConditionDefinition(); for (Element e : childs) { String key = e.getAttributeValue("key"); String value = e.getAttributeValue("value"); try { KeyValue kw = new KeyValue(key, value); kdef.addKeyValue(kw); } catch (Exception ex) { ex.printStackTrace(); } } definition.addConditionDefinition(ConditionDefinitions.KEYVALUE, kdef); } } else { KeyValue kw = new KeyValue(AdDBConstants.ADDB_BANNER_KEYVALUE, AdDBConstants.ADDB_BANNER_KEYVALUE_ALL); KeyValueConditionDefinition kdef = new KeyValueConditionDefinition(); kdef.addKeyValue(kw); definition.addConditionDefinition(ConditionDefinitions.KEYVALUE, kdef); } elem = conditions.getChild("sites"); if (elem != null) { List<Element> childs = elem.getChildren("site"); if (childs != null) { SiteConditionDefinition sdef = new SiteConditionDefinition(); for (Element e : childs) { String text = e.getTextTrim(); sdef.addSite(text); } definition.addConditionDefinition(ConditionDefinitions.SITE, sdef); } } else { SiteConditionDefinition sdef = new SiteConditionDefinition(); sdef.addSite(AdDBConstants.ADDB_BANNER_SITE_ALL); definition.addConditionDefinition(ConditionDefinitions.SITE, sdef); } elem = conditions.getChild("exclude_sites"); if (elem != null) { List<Element> childs = elem.getChildren("site"); if (childs != null) { ExcludeSiteConditionDefinition sdef = new ExcludeSiteConditionDefinition(); for (Element e : childs) { String text = e.getTextTrim(); sdef.addSite(text); } definition.addConditionDefinition(ConditionDefinitions.EXCLUDE_SITE, sdef); } } elem = conditions.getChild("distance"); if (elem != null) { String latitude = elem.getChild("latitude").getValue(); String longitude = elem.getChild("longitude").getValue(); String radius = elem.getChild("radius").getValue(); GeoLocation geo = new GeoLocation(Double.parseDouble(latitude), Double.parseDouble(longitude)); DistanceConditionDefinition sdef = new DistanceConditionDefinition(); sdef.setGeoLocation(geo); sdef.setGeoRadius(Integer.parseInt(radius)); definition.addConditionDefinition(ConditionDefinitions.DISTANCE, sdef); } elem = conditions.getChild("expiration"); if (elem != null) { List<Element> childs = elem.getChildren(); if (childs != null) { ViewExpirationConditionDefinition vdef = new ViewExpirationConditionDefinition(); ClickExpirationConditionDefinition cdef = new ClickExpirationConditionDefinition(); for (Element elem2 : childs) { String name = elem2.getName(); String count = elem2.getValue(); String resolution = elem2.getAttributeValue("resolution"); ExpirationResolution res = ExpirationResolution.forName(resolution); if (res.equals(ExpirationResolution.NONE)) { continue; } if (name.equalsIgnoreCase("clicks")) { cdef.getClickExpirations().put(res, Integer.parseInt(count.trim())); } else if (name.equalsIgnoreCase("views")) { vdef.getViewExpirations().put(res, Integer.parseInt(count.trim())); } } if (vdef.getViewExpirations().size() > 0) { definition.addConditionDefinition(ConditionDefinitions.VIEW_EXPIRATION, vdef); } if (cdef.getClickExpirations().size() > 0) { definition.addConditionDefinition(ConditionDefinitions.CLICK_EXPIRATION, cdef); } } } } return definition; } }