/* Copyright 2008-2010 Gephi Authors : Mathieu Bastian <mathieu.bastian@gephi.org> Website : http://www.gephi.org This file is part of Gephi. Gephi is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gephi 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Gephi. If not, see <http://www.gnu.org/licenses/>. */ package org.gephi.graph.dhns.core; import java.util.HashMap; import java.util.Map; import org.gephi.data.attributes.api.Estimator; import org.gephi.graph.api.GraphEvent.EventType; import org.gephi.graph.api.GraphSettings; import org.gephi.graph.api.GraphView; import org.gephi.graph.dhns.edge.AverageMetaEdgeBuilder; import org.gephi.graph.dhns.edge.SumMetaEdgeBuilder; import org.gephi.graph.dhns.event.GeneralEvent; import org.gephi.graph.spi.MetaEdgeBuilder; /** * * @author Mathieu Bastian */ public class SettingsManager implements GraphSettings { private Dhns dhns; //Settings private Boolean autoMetaEdgeCreation; private MetaEdgeBuilder metaEdgeBuilder; private Float metaEdgeBuilderNonDeepDivisor; private Estimator defaultWeightEstimator; public SettingsManager(Dhns dhns) { this.dhns = dhns; defaultSettings(); } private void defaultSettings() { autoMetaEdgeCreation = Boolean.TRUE; metaEdgeBuilderNonDeepDivisor = Float.valueOf(10f); metaEdgeBuilder = new SumMetaEdgeBuilder(metaEdgeBuilderNonDeepDivisor); defaultWeightEstimator = Estimator.AVERAGE; } public boolean isAutoMetaEdgeCreation() { return autoMetaEdgeCreation; } public MetaEdgeBuilder getMetaEdgeBuilder() { return metaEdgeBuilder; } public Estimator getDefaultWeightEstimator() { return defaultWeightEstimator; } public void setMetaEdgeBuilder(MetaEdgeBuilder metaEdgeBuilder) { putClientProperty(GraphSettings.METAEDGE_BUILDER, metaEdgeBuilder); } public void putClientProperty(String key, Object value) { if (key.equals(GraphSettings.AUTO_META_EDGES)) { autoMetaEdgeCreation = (Boolean) value; fireUpdate(); } else if (key.equals(GraphSettings.METAEDGE_BUILDER)) { if (value instanceof MetaEdgeBuilder) { metaEdgeBuilder = (MetaEdgeBuilder) value; } if (value.equals("average")) { metaEdgeBuilder = new AverageMetaEdgeBuilder(metaEdgeBuilderNonDeepDivisor); } else if (value.equals("sum")) { metaEdgeBuilder = new SumMetaEdgeBuilder(metaEdgeBuilderNonDeepDivisor); } fireUpdate(); } else if (key.equals(GraphSettings.METAEDGE_BUILDER_NONDEEP_DIVISOR)) { metaEdgeBuilderNonDeepDivisor = (Float) value; if (metaEdgeBuilder instanceof SumMetaEdgeBuilder) { metaEdgeBuilder = new SumMetaEdgeBuilder(metaEdgeBuilderNonDeepDivisor); } else if (metaEdgeBuilder instanceof AverageMetaEdgeBuilder) { metaEdgeBuilder = new AverageMetaEdgeBuilder(metaEdgeBuilderNonDeepDivisor); } fireUpdate(); } else if(key.equals(GraphSettings.DEFAULT_WEIGHT_ESTIMATOR)) { defaultWeightEstimator = (Estimator)value; fireUpdate(); } } public Object getClientProperty(String key) { if (key.equals(GraphSettings.AUTO_META_EDGES)) { return autoMetaEdgeCreation; } else if (key.equals(GraphSettings.METAEDGE_BUILDER)) { if (metaEdgeBuilder instanceof SumMetaEdgeBuilder) { return "sum"; } else if (metaEdgeBuilder instanceof AverageMetaEdgeBuilder) { return "average"; } else { return metaEdgeBuilder.getClass().getName(); } } else if (key.equals(GraphSettings.METAEDGE_BUILDER_NONDEEP_DIVISOR)) { return metaEdgeBuilderNonDeepDivisor; } else if (key.equals(GraphSettings.DEFAULT_WEIGHT_ESTIMATOR)) { return defaultWeightEstimator; } return null; } private void fireUpdate() { dhns.getGraphVersion().incEdgeVersion(); for (GraphView view : dhns.getGraphStructure().getViews()) { dhns.getEventManager().fireEvent(new GeneralEvent(EventType.META_EDGES_UPDATE, view)); } } public Map<String, Object> getClientProperties() { Map<String, Object> map = new HashMap<String, Object>(); map.put(GraphSettings.AUTO_META_EDGES, getClientProperty(GraphSettings.AUTO_META_EDGES)); map.put(GraphSettings.METAEDGE_BUILDER, getClientProperty(GraphSettings.METAEDGE_BUILDER)); map.put(GraphSettings.METAEDGE_BUILDER_NONDEEP_DIVISOR, getClientProperty(GraphSettings.METAEDGE_BUILDER_NONDEEP_DIVISOR)); map.put(GraphSettings.DEFAULT_WEIGHT_ESTIMATOR, getClientProperty(GraphSettings.DEFAULT_WEIGHT_ESTIMATOR)); return map; } }