/** * ***************************************************************************** * Copyright 2013 Johannes Mitlmeier * * 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 de.fub.agg2graph.agg.strategy; import de.fub.agg2graph.agg.AggConnection; import de.fub.agg2graph.agg.AggContainer; import de.fub.agg2graph.agg.AggNode; import de.fub.agg2graph.agg.IAggregationStrategy; import de.fub.agg2graph.agg.IMergeHandler; import de.fub.agg2graph.agg.ITraceDistance; import de.fub.agg2graph.structs.ClassObjectEditor; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; public abstract class AbstractAggregationStrategy implements IAggregationStrategy { private static final Logger LOG = Logger.getLogger(AbstractAggregationStrategy.class.getName()); protected AggContainer aggContainer; protected ITraceDistance traceDistance; protected List<IMergeHandler> matches; protected IMergeHandler baseMergeHandler; protected IMergeHandler mergeHandler; protected AggNode lastNode = null; protected boolean addAllowed = true; @Override public ITraceDistance getTraceDist() { return traceDistance; } public IMergeHandler getBaseMergeHandler() { return baseMergeHandler; } public IMergeHandler getMergeHandler() { return mergeHandler; } public List<IMergeHandler> getMatches() { return matches; } @Override public AggContainer getAggContainer() { return aggContainer; } @Override public void setAggContainer(AggContainer aggContainer) { this.aggContainer = aggContainer; } /** * Add an {@link AggNode} to the {@link AggContainer}, automatically connect * it to the last {@link AggNode} added. * * @param agg * @param node */ protected void addNodeToAgg(AggContainer agg, AggNode node) { agg.addNode(node); if (lastNode != null) { agg.addConnection(new AggConnection(lastNode, node, agg)); } LOG.log(Level.FINEST, "Added node {0}", node); } @Override public AggConnection mergeConnections(AggConnection newConn, AggConnection oldConn) { return oldConn; } @Override public AggConnection combineConnections(AggConnection firstConn, AggConnection secondConn) { AggConnection conn = new AggConnection( firstConn.getFrom(), secondConn.getTo(), aggContainer); conn.setWeight((firstConn.getWeight() + secondConn.getWeight()) / 2); conn.setAvgDist((firstConn.getAvgDist() + secondConn.getAvgDist()) / 2); return conn; } @Override public void clear() { lastNode = null; } @Override public List<ClassObjectEditor> getSettings() { List<ClassObjectEditor> result = new ArrayList<ClassObjectEditor>(); result.add(new ClassObjectEditor(this, Arrays.asList(new String[]{ "baseMergeHandler", "aggContainer"}))); result.add(new ClassObjectEditor(getTraceDist())); result.add(new ClassObjectEditor(this.baseMergeHandler, Arrays .asList(new String[]{"distance", "rdpf", "aggContainer"}))); return result; } @Override public AggNode getLastNode() { return lastNode; } @Override public void setAddAllowed(boolean allowed) { this.addAllowed = allowed; } @Override public boolean getAddAllowed() { return this.addAllowed; } }