/* * Copyright (c) 2014 Globo.com - ATeam * All rights reserved. * * This source is subject to the Apache License, Version 2.0. * Please see the LICENSE file for more information. * * Authors: See AUTHORS file * * 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 com.globo.galeb.bus; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.net.URLDecoder; import org.vertx.java.core.json.JsonArray; import org.vertx.java.core.json.JsonObject; import com.globo.galeb.entity.Entity; import com.globo.galeb.entity.IJsonable; import com.globo.galeb.entity.impl.Farm; import com.globo.galeb.entity.impl.backend.BackendPool; import com.globo.galeb.entity.impl.backend.IBackend; import com.globo.galeb.entity.impl.frontend.Rule; import com.globo.galeb.entity.impl.frontend.Virtualhost; /** * Class FarmMap. * * @author: See AUTHORS file. * @version: 1.0.0, Oct 23, 2014. */ public class FarmMap extends MessageToMap<Farm> { /** * Instantiates a new farm map. */ public FarmMap() { super(); super.uriBase = "farm"; } /* (non-Javadoc) * @see com.globo.galeb.core.bus.MessageToMap#add() */ @Override public boolean add() { boolean isOk = false; defineLoggerIfNecessary(); JsonArray backendPools = entity.getArray("backendpools", new JsonArray()); Iterator<Object> backendPoolsIterator = backendPools.iterator(); while (backendPoolsIterator.hasNext()) { Object backendPoolObj = backendPoolsIterator.next(); JsonObject backendPoolJson = (JsonObject) backendPoolObj; BackendPoolMap backendPoolMap = new BackendPoolMap(); backendPoolMap.staticConf(staticConf); MessageBus backendPoolMessageBus = new MessageBus() .setEntity(backendPoolJson.encode()) .setUri("/backendpool") .make(); backendPoolMap.setMessageBus(backendPoolMessageBus).setFarm(farm); backendPoolMap.add(); JsonArray backends = backendPoolJson.getArray(BackendPool.BACKENDS_FIELDNAME); if (backends==null) { return isOk; } Iterator<Object> backendIterator = backends.iterator(); while (backendIterator.hasNext()) { Object backendObj = backendIterator.next(); JsonObject backendJson = (JsonObject) backendObj; BackendMap backendMap = new BackendMap(); backendMap.staticConf(staticConf); String backendPoolId = backendPoolJson.getString(IJsonable.ID_FIELDNAME); MessageBus backendMessageBus = new MessageBus() .setEntity(backendJson.encode()) .setParentId(backendPoolId) .setUri("/backend") .make(); backendMap.setMessageBus(backendMessageBus).setFarm(farm); backendMap.add(); } isOk = true; } JsonArray virtualhosts = entity.getArray("virtualhosts", new JsonArray()); Iterator<Object> virtualhostIterator = virtualhosts.iterator(); while (virtualhostIterator.hasNext()) { Object virtualhostObj = virtualhostIterator.next(); JsonObject virtualhostJson = (JsonObject) virtualhostObj; VirtualhostMap virtualhostMap = new VirtualhostMap(); virtualhostMap.staticConf(staticConf); MessageBus virtualhostMessageBus = new MessageBus() .setEntity(virtualhostJson.encode()) .setUri("/virtualhost") .make(); virtualhostMap.setMessageBus(virtualhostMessageBus).setFarm(farm); virtualhostMap.add(); JsonArray rules = virtualhostJson.getArray("rules"); if (rules==null) { return isOk; } Iterator<Object> ruleIterator = rules.iterator(); while (ruleIterator.hasNext()) { Object ruleObj = ruleIterator.next(); JsonObject ruleJson = (JsonObject) ruleObj; String ruleParentId = ruleJson.getString(IJsonable.PARENT_ID_FIELDNAME); RuleMap ruleMap = new RuleMap(); ruleMap.staticConf(staticConf); MessageBus ruleMessageBus = new MessageBus() .setEntity(ruleJson.encode()) .setParentId(ruleParentId) .setUri("/rule") .make(); ruleMap.setMessageBus(ruleMessageBus).setFarm(farm); ruleMap.add(); } isOk = true; } return isOk; } /* (non-Javadoc) * @see com.globo.galeb.core.bus.MessageToMap#del() */ @Override public boolean del() { defineLoggerIfNecessary(); boolean isOk = true; VirtualhostMap virtualhostMap = new VirtualhostMap(); RuleMap ruleMap = new RuleMap(); BackendPoolMap backendPoolMap = new BackendPoolMap(); BackendMap backendMap = new BackendMap(); List<Virtualhost> virtualhosts = new ArrayList<>(); virtualhosts.addAll(farm.getEntities().values()); for (Virtualhost virtualhost: virtualhosts) { List<Rule> rules = new ArrayList<>(); rules.addAll(virtualhost.getEntities().values()); for (Rule rule: rules) { MessageBus ruleMessageBus = null; try { ruleMessageBus = new MessageBus() .setEntity(rule.toJson()) .setParentId(rule.getParentId()) .setUri("/rule/"+URLDecoder.decode(rule.getId(), "UTF-8")) .make(); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); } isOk = isOk && ruleMap.setMessageBus(ruleMessageBus).setFarm(farm).del(); } MessageBus virtualhostMessageBus = null; try { virtualhostMessageBus = new MessageBus() .setEntity(virtualhost.toJson()) .setUri("/virtualhost/"+URLDecoder.decode(virtualhost.getId(), "UTF-8")) .make(); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); } isOk = isOk && virtualhostMap.setMessageBus(virtualhostMessageBus).setFarm(farm).del(); } List<BackendPool> backendPools = new ArrayList<>(); backendPools.addAll(farm.getBackendPools().getEntities().values()); for (BackendPool backendPool: backendPools) { List<IBackend> backends = new ArrayList<>(); backends.addAll(backendPool.getEntities().values()); for (IBackend backend: backends) { MessageBus backendMessageBus = null; try { backendMessageBus = new MessageBus() .setEntity(backend.toJson()) .setParentId(((Entity) backend).getParentId()) .setUri("/backend/"+URLDecoder.decode(((Entity) backend).getId(), "UTF-8")) .make(); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); } isOk = isOk && backendMap.setMessageBus(backendMessageBus).setFarm(farm).del(); } MessageBus backendPoolMessageBus = null; try { backendPoolMessageBus = new MessageBus() .setEntity(backendPool.toJson()) .setUri("/backendpool/"+URLDecoder.decode(backendPool.getId(), "UTF-8")) .make(); } catch (UnsupportedEncodingException e) { log.error(e.getMessage()); } isOk = isOk && backendPoolMap.setMessageBus(backendPoolMessageBus).setFarm(farm).del(); } return isOk; } /* (non-Javadoc) * @see com.globo.galeb.core.bus.MessageToMap#reset() */ @Override public boolean reset() { // TODO return false; } /* (non-Javadoc) * @see com.globo.galeb.core.bus.MessageToMap#change() */ @Override public boolean change() { // TODO return false; } }