gephi.team team mailing list archive
-
gephi.team team
-
Mailing list archive
-
Message #00954
[Merge] lp:~cezary-bartosiak/gephi/dynamic-attr-stats into lp:gephi
Sébastien Heymann has proposed merging lp:~cezary-bartosiak/gephi/dynamic-attr-stats into lp:gephi.
Requested reviews:
Mathieu Bastian (mathieu.bastian)
See http://wiki.gephi.org/index.php/Specification_-_Dynamic_Statistics
--
https://code.launchpad.net/~cezary-bartosiak/gephi/dynamic-attr-stats/+merge/43425
Your team Gephi Team is subscribed to branch lp:gephi.
=== modified file 'StatisticsAPI/nbproject/genfiles.properties'
--- StatisticsAPI/nbproject/genfiles.properties 2010-08-26 17:33:14 +0000
+++ StatisticsAPI/nbproject/genfiles.properties 2010-12-11 15:49:16 +0000
@@ -1,8 +1,8 @@
-build.xml.data.CRC32=1713e19b
+build.xml.data.CRC32=aa7e7e84
build.xml.script.CRC32=5fa00924
build.xml.stylesheet.CRC32=a56c6a5b@1.42.2
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=1713e19b
+nbproject/build-impl.xml.data.CRC32=aa7e7e84
nbproject/build-impl.xml.script.CRC32=d265fda5
nbproject/build-impl.xml.stylesheet.CRC32=238281d1@1.42.2
=== modified file 'StatisticsAPI/nbproject/project.properties'
--- StatisticsAPI/nbproject/project.properties 2010-08-28 09:35:47 +0000
+++ StatisticsAPI/nbproject/project.properties 2010-12-11 15:49:16 +0000
@@ -1,9 +1,9 @@
-auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=8
-auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=80
-auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=default
-javac.source=1.5
-javac.compilerargs=-Xlint -Xlint:-serial
-keystore=nbproject/private/keystore.ks
-license.file=../agpl-3.0.txt
-nbm.module.author=Gephi.org
-nbm_alias=gephi
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=8
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=80
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=default
+javac.source=1.5
+javac.compilerargs=-Xlint -Xlint:-serial
+keystore=nbproject/private/keystore.ks
+license.file=../gpl-3.0.txt
+nbm.module.author=Gephi.org
+nbm_alias=gephi
=== modified file 'StatisticsAPI/nbproject/project.xml'
--- StatisticsAPI/nbproject/project.xml 2010-08-26 17:33:14 +0000
+++ StatisticsAPI/nbproject/project.xml 2010-12-11 15:49:16 +0000
@@ -15,6 +15,14 @@
</run-dependency>
</dependency>
<dependency>
+ <code-name-base>org.gephi.dynamic.api</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>0.7.1</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
<code-name-base>org.gephi.graph.api</code-name-base>
<build-prerequisite/>
<compile-dependency/>
@@ -105,6 +113,7 @@
</test-type>
</test-dependencies>
<public-packages>
+ <package>org.gephi.statistics</package>
<package>org.gephi.statistics.api</package>
<package>org.gephi.statistics.spi</package>
</public-packages>
=== added file 'StatisticsAPI/src/org/gephi/statistics/DynamicStatisticsImpl.java'
--- StatisticsAPI/src/org/gephi/statistics/DynamicStatisticsImpl.java 1970-01-01 00:00:00 +0000
+++ StatisticsAPI/src/org/gephi/statistics/DynamicStatisticsImpl.java 2010-12-11 15:49:16 +0000
@@ -0,0 +1,199 @@
+/*
+ * Copyright 2008-2010 Gephi
+ * Authors : Cezary Bartosiak
+ * 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 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Gephi. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.gephi.statistics;
+
+import org.gephi.data.attributes.api.AttributeModel;
+import org.gephi.data.attributes.api.Estimator;
+import org.gephi.data.attributes.type.TimeInterval;
+import org.gephi.dynamic.DynamicUtilities;
+import org.gephi.dynamic.api.DynamicController;
+import org.gephi.dynamic.api.DynamicGraph;
+import org.gephi.dynamic.api.DynamicModel;
+import org.gephi.graph.api.Graph;
+import org.gephi.graph.api.GraphModel;
+import org.gephi.statistics.spi.DynamicStatistics;
+import org.gephi.statistics.spi.Statistics;
+import org.gephi.utils.longtask.spi.LongTask;
+import org.gephi.utils.progress.Progress;
+import org.gephi.utils.progress.ProgressTicket;
+import org.openide.util.Lookup;
+
+/**
+ * The default implementation of {@link DynamicStatistics}.
+ *
+ * @author Cezary Bartosiak
+ */
+public abstract class DynamicStatisticsImpl implements DynamicStatistics, Statistics, LongTask {
+ protected TimeInterval timeInterval = new TimeInterval(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY);
+ protected double window = Double.POSITIVE_INFINITY - Double.NEGATIVE_INFINITY;
+ protected Estimator estimator = Estimator.FIRST;
+
+ private boolean cancel;
+ private ProgressTicket progressTicket;
+ private String graphRevision;
+
+ public TimeInterval getTimeInterval() {
+ return timeInterval;
+ }
+
+ public double getWindow() {
+ return window;
+ }
+
+ public Estimator getEstimator() {
+ return estimator;
+ }
+
+ public void setTimeInterval(TimeInterval timeInterval) {
+ this.timeInterval = timeInterval;
+ }
+
+ public void setWindow(double window) {
+ if (window < 0 || window > timeInterval.getHigh() - timeInterval.getLow())
+ throw new IllegalArgumentException(
+ "The window must be greater than 0 " +
+ "and less or equal to (high - low).");
+
+ this.window = window;
+ }
+
+ public void setEstimator(Estimator estimator) {
+ if (estimator != Estimator.MEDIAN && estimator != Estimator.MODE &&
+ estimator != Estimator.FIRST && estimator != Estimator.LAST)
+ throw new IllegalArgumentException(
+ "The given estimator must be one of the following: " +
+ "MEDIAN, MODE, FIRST, LAST.");
+
+ this.estimator = estimator;
+ }
+
+ public void execute(GraphModel graphModel, AttributeModel attributeModel) {
+ Graph graph = graphModel.getGraphVisible();
+
+ DynamicController dynamicController = Lookup.getDefault().lookup(DynamicController.class);
+ DynamicModel dynamicModel = dynamicController.getModel();
+ DynamicGraph dynamicGraph = dynamicModel.createDynamicGraph(graph, timeInterval);
+
+ cancel = false;
+ graph.writeLock();
+
+ graphRevision = "(" + graph.getNodeVersion() + ", " + graph.getEdgeVersion() + ")";
+
+ // fire abstract preloop method
+ preloop();
+
+ int progress = 0;
+ Progress.start(progressTicket, progress);
+
+ for (double low = timeInterval.getLow(); low <= timeInterval.getHigh() - window;
+ low += (window < 1.0 ? 1.0 : window)) {
+ double high = low + window;
+
+ Graph g = dynamicGraph.getSnapshotGraph(low, high, estimator);
+
+ // fire abstract inloop method
+ inloop(low, high, g, attributeModel);
+
+ Progress.progress(progressTicket, ++progress);
+ if (cancel) {
+ graph.writeUnlock();
+ return;
+ }
+ }
+
+ graph.writeUnlock();
+ }
+
+ /**
+ * Fires before the loop on all time intervals.
+ */
+ protected abstract void preloop();
+
+ /**
+ * Fires during the loop on all time intervals.
+ *
+ * @param low the left endpoint of the current interval
+ * @param high the right endpoint of the current interval
+ * @param g the snapshot graph
+ * @param attributeModel the attributes model to write results to
+ */
+ protected abstract void inloop(double low, double high, Graph g, AttributeModel attributeModel);
+
+ public String getReport() {
+ String start = "-inf";
+ String end = "+inf";
+ if (!Double.isInfinite(timeInterval.getLow()))
+ start = DynamicUtilities.getXMLDateStringFromDouble(timeInterval.getLow()).replace('T', ' ').
+ substring(0, 19);
+ if (!Double.isInfinite(timeInterval.getHigh()))
+ end = DynamicUtilities.getXMLDateStringFromDouble(timeInterval.getHigh()).replace('T', ' ').
+ substring(0, 19);
+
+ String windowString = (int)Math.round(window / (timeInterval.getHigh() - timeInterval.getLow()) * 100) + "";
+
+ String report = new String(
+ "<html><body><h1>" + getReportName() + "</h1>" +
+ "<hr><br><h2>Network Revision Number:</h2>" +
+ graphRevision +
+ "<br>" +
+ "<h2>Parameters:</h2>" +
+ "Time interval: " + "[" + start + ", " + end + "]<br>" +
+ "Window: " + windowString + " %<br>" +
+ "Estimator: " + estimator + "<br>" +
+ getAdditionalParameters() +
+ "<h2>Results:</h2>" +
+ getResults() +
+ "</body></html>"
+ );
+
+ return report;
+ }
+
+ /**
+ * Returns the name of the report.
+ *
+ * @return the name of the report.
+ */
+ protected abstract String getReportName();
+
+ /**
+ * Returns html with additional parameters.
+ *
+ * @return html with additional parameters.
+ */
+ protected abstract String getAdditionalParameters();
+
+ /**
+ * Returns html with results of firing this dynamic metric.
+ *
+ * @return html with results of firing this dynamic metric.
+ */
+ protected abstract String getResults();
+
+ public boolean cancel() {
+ cancel = true;
+ return true;
+ }
+
+ public void setProgressTicket(ProgressTicket progressTicket) {
+ this.progressTicket = progressTicket;
+ }
+}
=== modified file 'StatisticsAPI/src/org/gephi/statistics/StatisticsPersistenceProvider.java'
--- StatisticsAPI/src/org/gephi/statistics/StatisticsPersistenceProvider.java 2010-08-26 15:48:36 +0000
+++ StatisticsAPI/src/org/gephi/statistics/StatisticsPersistenceProvider.java 2010-12-11 15:49:16 +0000
@@ -20,7 +20,6 @@
*/
package org.gephi.statistics;
-import org.gephi.statistics.StatisticsModelImpl;
import org.gephi.project.api.Workspace;
import org.gephi.project.spi.WorkspacePersistenceProvider;
import org.openide.util.lookup.ServiceProvider;
=== added file 'StatisticsAPI/src/org/gephi/statistics/spi/DynamicStatistics.java'
--- StatisticsAPI/src/org/gephi/statistics/spi/DynamicStatistics.java 1970-01-01 00:00:00 +0000
+++ StatisticsAPI/src/org/gephi/statistics/spi/DynamicStatistics.java 2010-12-11 15:49:16 +0000
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2008-2010 Gephi
+ * Authors : Cezary Bartosiak
+ * 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 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Gephi. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.gephi.statistics.spi;
+
+import org.gephi.data.attributes.api.Estimator;
+import org.gephi.data.attributes.type.TimeInterval;
+
+/**
+ * An interface for dynamic statistics.
+ *
+ * @author Cezary Bartosiak
+ */
+public interface DynamicStatistics {
+ /**
+ * Sets a time interval for which the statistics is executed.
+ *
+ * @param timeInterval the {@code TimeInterval} to set
+ */
+ public void setTimeInterval(TimeInterval timeInterval);
+
+ /**
+ * Sets the window - duration of one slice. It can be for instance
+ * one year, one month etc.
+ *
+ * @param window duration of one slice
+ *
+ * @throws IllegalArgumentException if {@code window} <= {@code 0} or
+ * {@code window} > {@code high} - {@code low}.
+ */
+ public void setWindow(double window);
+
+ /**
+ * Sets the {@code Estimator} used to estimate snapshot graphs.
+ *
+ * @param estimator the {@code Estimator} used to estimate snapshot graphs
+ *
+ * @throws IllegalArgumentException if the given {@code Estimator} is other than
+ * {@code MEDIAN}, {@code MODE}, {@code FIRST} or
+ * {@code LAST}.
+ */
+ public void setEstimator(Estimator estimator);
+
+ /**
+ * Returns the time interval for which the statistics is executed.
+ *
+ * @return the time interval for which the statistics is executed.
+ */
+ public TimeInterval getTimeInterval();
+
+ /**
+ * Returns the duration of one slice.
+ *
+ * @return the duration of one slice.
+ */
+ public double getWindow();
+
+ /**
+ * Returns the {@code Estimator} used to estimate snapshot graphs.
+ *
+ * @return the {@code Estimator} used to estimate snapshot graphs.
+ */
+ public Estimator getEstimator();
+}
=== modified file 'StatisticsPlugin/nbproject/genfiles.properties'
--- StatisticsPlugin/nbproject/genfiles.properties 2010-06-24 04:19:06 +0000
+++ StatisticsPlugin/nbproject/genfiles.properties 2010-12-11 15:49:16 +0000
@@ -1,8 +1,8 @@
-build.xml.data.CRC32=21b3e328
+build.xml.data.CRC32=474d6815
build.xml.script.CRC32=c86b517c
build.xml.stylesheet.CRC32=a56c6a5b@1.42.1
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=21b3e328
+nbproject/build-impl.xml.data.CRC32=474d6815
nbproject/build-impl.xml.script.CRC32=53e53f17
nbproject/build-impl.xml.stylesheet.CRC32=238281d1@1.42.1
=== modified file 'StatisticsPlugin/nbproject/project.xml'
--- StatisticsPlugin/nbproject/project.xml 2010-06-22 16:26:18 +0000
+++ StatisticsPlugin/nbproject/project.xml 2010-12-11 15:49:16 +0000
@@ -15,6 +15,14 @@
</run-dependency>
</dependency>
<dependency>
+ <code-name-base>org.gephi.dynamic.api</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>0.7</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
<code-name-base>org.gephi.graph.api</code-name-base>
<build-prerequisite/>
<compile-dependency/>
@@ -27,7 +35,7 @@
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
- <specification-version>0.7</specification-version>
+ <specification-version>0.7.0.3</specification-version>
</run-dependency>
</dependency>
<dependency>
=== added file 'StatisticsPlugin/src/org/gephi/statistics/plugin/DynamicDegreeDistribution.java'
--- StatisticsPlugin/src/org/gephi/statistics/plugin/DynamicDegreeDistribution.java 1970-01-01 00:00:00 +0000
+++ StatisticsPlugin/src/org/gephi/statistics/plugin/DynamicDegreeDistribution.java 2010-12-11 15:49:16 +0000
@@ -0,0 +1,395 @@
+/*
+ * Copyright 2008-2010 Gephi
+ * Authors : Cezary Bartosiak
+ * 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 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Gephi. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.gephi.statistics.plugin;
+
+import java.awt.Color;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import org.gephi.data.attributes.api.AttributeColumn;
+import org.gephi.data.attributes.api.AttributeModel;
+import org.gephi.data.attributes.api.AttributeOrigin;
+import org.gephi.data.attributes.api.AttributeRow;
+import org.gephi.data.attributes.api.AttributeTable;
+import org.gephi.data.attributes.api.AttributeType;
+import org.gephi.data.attributes.type.DynamicInteger;
+import org.gephi.data.attributes.type.Interval;
+import org.gephi.dynamic.DynamicUtilities;
+import org.gephi.graph.api.DirectedGraph;
+import org.gephi.graph.api.Graph;
+import org.gephi.graph.api.Node;
+import org.gephi.graph.api.UndirectedGraph;
+import org.gephi.statistics.DynamicStatisticsImpl;
+import org.gephi.utils.TempDirUtils;
+import org.gephi.utils.TempDirUtils.TempDir;
+import org.gephi.utils.progress.ProgressTicket;
+import org.jfree.chart.ChartFactory;
+import org.jfree.chart.ChartRenderingInfo;
+import org.jfree.chart.ChartUtilities;
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.axis.CategoryAxis;
+import org.jfree.chart.axis.CategoryLabelPositions;
+import org.jfree.chart.axis.NumberAxis;
+import org.jfree.chart.axis.NumberTickUnit;
+import org.jfree.chart.entity.StandardEntityCollection;
+import org.jfree.chart.plot.CategoryPlot;
+import org.jfree.chart.plot.PlotOrientation;
+import org.jfree.data.category.DefaultCategoryDataset;
+import org.jfree.ui.RectangleInsets;
+import org.openide.util.Exceptions;
+
+/**
+ * This class measures how closely the degree distribution of a
+ * network follows a power-law scale. An alpha value between 2 and 3
+ * implies a power law. It's a dynamic version that means the statistic
+ * is measured for every part (year, month etc. it depends on user's
+ * settings) of the given time interval.
+ *
+ * @author Cezary Bartosiak
+ */
+public class DynamicDegreeDistribution extends DynamicStatisticsImpl {
+ private boolean directed;
+
+ private List<Interval<Double>> inDegrees = new ArrayList<Interval<Double>>();
+ private List<Interval<Double>> outDegrees = new ArrayList<Interval<Double>>();
+ private List<Interval<Double>> combinedDegrees = new ArrayList<Interval<Double>>();
+
+ /**
+ * Indicates if this network should be directed or undirected.
+ *
+ * @param directed indicates the metric's interpretation of this network
+ */
+ public void setDirected(boolean directed) {
+ this.directed = directed;
+ }
+
+ /**
+ * Returns {@code true} if this network should be directed,
+ * otherwise {@code false}.
+ *
+ * @return {@code true} if this network should be directed,
+ * otherwise {@code false}.
+ */
+ public boolean isDirected() {
+ return directed;
+ }
+
+ @Override
+ protected void preloop() {
+ inDegrees.clear();
+ outDegrees.clear();
+ combinedDegrees.clear();
+ }
+
+ @Override
+ protected void inloop(double low, double high, Graph g, AttributeModel attributeModel) {
+ DegreeDistribution dd = new DegreeDistribution();
+ dd.setDirected(directed);
+ dd.execute(g, attributeModel);
+
+ AttributeTable nodeTable = attributeModel.getNodeTable();
+ AttributeColumn dynamicInDegree = nodeTable.getColumn("dynamicInDegree");
+ AttributeColumn dynamicOutDegree = nodeTable.getColumn("dynamicOutDegree");
+ AttributeColumn dynamicDegree = nodeTable.getColumn("dynamicDegree");
+ if (dynamicInDegree == null)
+ dynamicInDegree = nodeTable.addColumn("dynamicInDegree", "Dynamic In Degree",
+ AttributeType.DYNAMIC_INT, AttributeOrigin.COMPUTED, new DynamicInteger());
+ if (dynamicOutDegree == null)
+ dynamicOutDegree = nodeTable.addColumn("dynamicOutDegree", "Dynamic Out Degree",
+ AttributeType.DYNAMIC_INT, AttributeOrigin.COMPUTED, new DynamicInteger());
+ if (dynamicDegree == null)
+ dynamicDegree = nodeTable.addColumn("dynamicDegree", "Dynamic Degree",
+ AttributeType.DYNAMIC_INT, AttributeOrigin.COMPUTED, new DynamicInteger());
+
+ for (Node node : g.getNodes()) {
+ AttributeRow row = (AttributeRow)node.getNodeData().getAttributes();
+ if (directed) {
+ row.setValue(dynamicInDegree, new DynamicInteger((DynamicInteger)row.getValue(dynamicInDegree),
+ new Interval<Integer>(low, high, ((DirectedGraph)g).getInDegree(node))));
+ row.setValue(dynamicOutDegree, new DynamicInteger((DynamicInteger)row.getValue(dynamicOutDegree),
+ new Interval<Integer>(low, high, ((DirectedGraph)g).getOutDegree(node))));
+ }
+ else row.setValue(dynamicDegree, new DynamicInteger((DynamicInteger)row.getValue(dynamicDegree),
+ new Interval<Integer>(low, high, ((UndirectedGraph)g).getDegree(node))));
+ }
+
+ inDegrees.add(new Interval<Double>(low, high, dd.getInPowerLaw()));
+ outDegrees.add(new Interval<Double>(low, high, dd.getOutPowerLaw()));
+ combinedDegrees.add(new Interval<Double>(low, high, dd.getCombinedPowerLaw()));
+ }
+
+ @Override
+ protected String getReportName() {
+ return "Dynamic Degree Distribution Metric Report";
+ }
+
+ @Override
+ protected String getAdditionalParameters() {
+ return "Network Interpretation: " + (directed ? "directed" : "undirected");
+ }
+
+ @Override
+ protected String getResults() {
+ if (directed)
+ return getDirectedReport();
+ else return getUndirectedReport();
+ }
+
+ private String getDirectedReport() {
+ String tableContent = "";
+ for (int i = 0; i < inDegrees.size(); ++i) {
+ String interval = "[";
+ interval += DynamicUtilities.getXMLDateStringFromDouble(inDegrees.get(i).getLow()).replace('T', ' ').
+ substring(0, 19) + ", ";
+ interval += DynamicUtilities.getXMLDateStringFromDouble(inDegrees.get(i).getHigh()).replace('T', ' ').
+ substring(0, 19);
+ interval += "]";
+
+ tableContent += "<tr>";
+ tableContent += "<td>";
+ tableContent += interval;
+ tableContent += "</td>";
+ tableContent += "<td>";
+ tableContent += inDegrees.get(i).getValue();
+ tableContent += "</td>";
+ tableContent += "<td>";
+ tableContent += outDegrees.get(i).getValue();
+ tableContent += "</td>";
+ tableContent += "</tr>";
+ }
+ String table =
+ "<table>" +
+ "<tr>" +
+ "<td><b>Time interval</b></td>" +
+ "<td><b>In-Degree Power Law</b></td>" +
+ "<td><b>Out-Degree Power Law</b></td>" +
+ "</tr>" +
+ tableContent +
+ "</table>";
+
+ String inImage = "";
+ try {
+ double inMin = Double.POSITIVE_INFINITY;
+ double inMax = Double.NEGATIVE_INFINITY;
+ DefaultCategoryDataset inDataset = new DefaultCategoryDataset();
+ for (int i = 0; i < inDegrees.size(); ++i) {
+ if (inMin > inDegrees.get(i).getValue())
+ inMin = inDegrees.get(i).getValue();
+ if (inMax < inDegrees.get(i).getValue())
+ inMax = inDegrees.get(i).getValue();
+ String interval = "[";
+ interval += DynamicUtilities.getXMLDateStringFromDouble(inDegrees.get(i).getLow()).replace('T', ' ').
+ substring(0, 19) + ", ";
+ interval += DynamicUtilities.getXMLDateStringFromDouble(inDegrees.get(i).getHigh()).replace('T', ' ').
+ substring(0, 19);
+ interval += "]";
+ inDataset.addValue(inDegrees.get(i).getValue(), "in degrees", interval);
+ }
+
+ JFreeChart inChart = ChartFactory.createLineChart(
+ "In-Degree Power Law",
+ "Time intervals",
+ "In-Degree Power Law",
+ inDataset,
+ PlotOrientation.VERTICAL,
+ true,
+ false,
+ false
+ );
+ inChart.setPadding(new RectangleInsets(0, 80, 0, 0));
+ CategoryPlot inPlot = (CategoryPlot)inChart.getPlot();
+ inPlot.setBackgroundPaint(Color.WHITE);
+ inPlot.setDomainGridlinePaint(Color.GRAY);
+ inPlot.setRangeGridlinePaint(Color.GRAY);
+ CategoryAxis inDomainAxis = inPlot.getDomainAxis();
+ inDomainAxis.setLowerMargin(0.0);
+ inDomainAxis.setUpperMargin(0.0);
+ inDomainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
+ NumberAxis inRangeAxis = (NumberAxis)inPlot.getRangeAxis();
+ inRangeAxis.setTickUnit(new NumberTickUnit(0.05));
+ inRangeAxis.setRange(inMin - 0.01 * inMin, inMax + 0.01 * inMax);
+
+ ChartRenderingInfo inInfo = new ChartRenderingInfo(new StandardEntityCollection());
+ TempDir inTempDir = TempDirUtils.createTempDir();
+ String inFileName = "inDynamicDistribution.png";
+ File inFile = inTempDir.createFile(inFileName);
+ inImage = "<img src=\"file:" + inFile.getAbsolutePath() + "\" " + "width=\"600\" height=\"600\" " +
+ "border=\"0\" usemap=\"#chart\"></img>";
+ ChartUtilities.saveChartAsPNG(inFile, inChart, 600, 600, inInfo);
+ }
+ catch (IOException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+
+ String outImage = "";
+ try {
+ double outMin = Double.POSITIVE_INFINITY;
+ double outMax = Double.NEGATIVE_INFINITY;
+ DefaultCategoryDataset outDataset = new DefaultCategoryDataset();
+ for (int i = 0; i < outDegrees.size(); ++i) {
+ if (outMin > outDegrees.get(i).getValue())
+ outMin = outDegrees.get(i).getValue();
+ if (outMax < outDegrees.get(i).getValue())
+ outMax = outDegrees.get(i).getValue();
+ String interval = "[";
+ interval += DynamicUtilities.getXMLDateStringFromDouble(outDegrees.get(i).getLow()).replace('T', ' ').
+ substring(0, 19) + ", ";
+ interval += DynamicUtilities.getXMLDateStringFromDouble(outDegrees.get(i).getHigh()).replace('T', ' ').
+ substring(0, 19);
+ interval += "]";
+ outDataset.addValue(outDegrees.get(i).getValue(), "out degrees", interval);
+ }
+
+ JFreeChart outChart = ChartFactory.createLineChart(
+ "Out-Degree Power Law",
+ "Time intervals",
+ "Out-Degree Power Law",
+ outDataset,
+ PlotOrientation.VERTICAL,
+ true,
+ false,
+ false
+ );
+ outChart.setPadding(new RectangleInsets(0, 80, 0, 0));
+ CategoryPlot outPlot = (CategoryPlot)outChart.getPlot();
+ outPlot.setBackgroundPaint(Color.WHITE);
+ outPlot.setDomainGridlinePaint(Color.GRAY);
+ outPlot.setRangeGridlinePaint(Color.GRAY);
+ CategoryAxis outDomainAxis = outPlot.getDomainAxis();
+ outDomainAxis.setLowerMargin(0.0);
+ outDomainAxis.setUpperMargin(0.0);
+ outDomainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
+ NumberAxis outRangeAxis = (NumberAxis)outPlot.getRangeAxis();
+ outRangeAxis.setTickUnit(new NumberTickUnit(0.05));
+ outRangeAxis.setRange(outMin - 0.01 * outMin, outMax + 0.01 * outMax);
+
+ ChartRenderingInfo outInfo = new ChartRenderingInfo(new StandardEntityCollection());
+ TempDir outTempDir = TempDirUtils.createTempDir();
+ String outFileName = "outDynamicDistribution.png";
+ File outFile = outTempDir.createFile(outFileName);
+ outImage = "<img src=\"file:" + outFile.getAbsolutePath() + "\" " + "width=\"600\" height=\"600\" " +
+ "border=\"0\" usemap=\"#chart\"></img>";
+ ChartUtilities.saveChartAsPNG(outFile, outChart, 600, 600, outInfo);
+ }
+ catch (IOException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+
+ String report = new String(
+ table + "<br>" +
+ inImage + "<br>" +
+ outImage + "<br>"
+ );
+
+ return report;
+ }
+
+ private String getUndirectedReport() {
+ String tableContent = "";
+ for (int i = 0; i < combinedDegrees.size(); ++i) {
+ String interval = "[";
+ interval += DynamicUtilities.getXMLDateStringFromDouble(combinedDegrees.get(i).getLow()).replace('T', ' ').
+ substring(0, 19) + ", ";
+ interval += DynamicUtilities.getXMLDateStringFromDouble(combinedDegrees.get(i).getHigh()).replace('T', ' ').
+ substring(0, 19);
+ interval += "]";
+
+ tableContent += "<tr>";
+ tableContent += "<td>";
+ tableContent += interval;
+ tableContent += "</td>";
+ tableContent += "<td>";
+ tableContent += combinedDegrees.get(i).getValue();
+ tableContent += "</td>";
+ tableContent += "</tr>";
+ }
+ String table =
+ "<table>" +
+ "<tr>" +
+ "<td><b>Time interval</b></td>" +
+ "<td><b>Combined-Degree Power Law</b></td>" +
+ "</tr>" +
+ tableContent +
+ "</table>";
+
+ String image = "";
+ try {
+ double min = Double.POSITIVE_INFINITY;
+ double max = Double.NEGATIVE_INFINITY;
+ DefaultCategoryDataset dataset = new DefaultCategoryDataset();
+ for (int i = 0; i < combinedDegrees.size(); ++i) {
+ if (min > combinedDegrees.get(i).getValue())
+ min = combinedDegrees.get(i).getValue();
+ if (max < combinedDegrees.get(i).getValue())
+ max = combinedDegrees.get(i).getValue();
+ String interval = "[";
+ interval += DynamicUtilities.getXMLDateStringFromDouble(combinedDegrees.get(i).getLow()).
+ replace('T', ' ').substring(0, 19) + ", ";
+ interval += DynamicUtilities.getXMLDateStringFromDouble(combinedDegrees.get(i).getHigh()).
+ replace('T', ' ').substring(0, 19);
+ interval += "]";
+ dataset.addValue(combinedDegrees.get(i).getValue(), "combined degrees", interval);
+ }
+
+ JFreeChart chart = ChartFactory.createLineChart(
+ "Combined-Degree Power Law",
+ "Time intervals",
+ "Combined-Degree Power Law",
+ dataset,
+ PlotOrientation.VERTICAL,
+ true,
+ false,
+ false
+ );
+ chart.setPadding(new RectangleInsets(0, 80, 0, 0));
+ CategoryPlot plot = (CategoryPlot)chart.getPlot();
+ plot.setBackgroundPaint(Color.WHITE);
+ plot.setDomainGridlinePaint(Color.GRAY);
+ plot.setRangeGridlinePaint(Color.GRAY);
+ CategoryAxis domainAxis = plot.getDomainAxis();
+ domainAxis.setLowerMargin(0.0);
+ domainAxis.setUpperMargin(0.0);
+ domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
+ NumberAxis rangeAxis = (NumberAxis)plot.getRangeAxis();
+ rangeAxis.setTickUnit(new NumberTickUnit(0.05));
+ rangeAxis.setRange(min - 0.01 * min, max + 0.01 * max);
+
+ ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
+ TempDir tempDir = TempDirUtils.createTempDir();
+ String fileName = "combinedDynamicDistribution.png";
+ File file = tempDir.createFile(fileName);
+ image = "<img src=\"file:" + file.getAbsolutePath() + "\" " + "width=\"600\" height=\"600\" " +
+ "border=\"0\" usemap=\"#chart\"></img>";
+ ChartUtilities.saveChartAsPNG(file, chart, 600, 600, info);
+ }
+ catch (IOException ex) {
+ Exceptions.printStackTrace(ex);
+ }
+
+ String report = new String(
+ table + "<br>" +
+ image + "<br>"
+ );
+
+ return report;
+ }
+}
=== added file 'StatisticsPlugin/src/org/gephi/statistics/plugin/builder/DynamicDegreeDistributionBuilder.java'
--- StatisticsPlugin/src/org/gephi/statistics/plugin/builder/DynamicDegreeDistributionBuilder.java 1970-01-01 00:00:00 +0000
+++ StatisticsPlugin/src/org/gephi/statistics/plugin/builder/DynamicDegreeDistributionBuilder.java 2010-12-11 15:49:16 +0000
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2008-2010 Gephi
+ * Authors : Cezary Bartosiak
+ * 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 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Gephi. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.gephi.statistics.plugin.builder;
+
+import org.gephi.statistics.plugin.DynamicDegreeDistribution;
+import org.gephi.statistics.spi.Statistics;
+import org.gephi.statistics.spi.StatisticsBuilder;
+import org.openide.util.lookup.ServiceProvider;
+
+/**
+ * The dynamic degree distribution builder that bundles together GUI,
+ * theory and dynamic aspects of the statistic.
+ *
+ * @author Cezary Bartosiak
+ */
+@ServiceProvider(service = StatisticsBuilder.class)
+public class DynamicDegreeDistributionBuilder implements StatisticsBuilder {
+ @Override
+ public String getName() {
+ return "Dynamic Degree Distribution";
+ }
+
+ @Override
+ public Statistics getStatistics() {
+ return new DynamicDegreeDistribution();
+ }
+
+ @Override
+ public Class<? extends Statistics> getStatisticsClass() {
+ return DynamicDegreeDistribution.class;
+ }
+}
=== modified file 'StatisticsPluginUI/nbproject/genfiles.properties'
--- StatisticsPluginUI/nbproject/genfiles.properties 2010-06-22 16:26:18 +0000
+++ StatisticsPluginUI/nbproject/genfiles.properties 2010-12-11 15:49:16 +0000
@@ -1,8 +1,8 @@
-build.xml.data.CRC32=a02d6deb
+build.xml.data.CRC32=86386ce8
build.xml.script.CRC32=4246cdb0
build.xml.stylesheet.CRC32=a56c6a5b@1.42.1
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
-nbproject/build-impl.xml.data.CRC32=a02d6deb
+nbproject/build-impl.xml.data.CRC32=86386ce8
nbproject/build-impl.xml.script.CRC32=c692b14f
nbproject/build-impl.xml.stylesheet.CRC32=238281d1@1.42.1
=== modified file 'StatisticsPluginUI/nbproject/project.xml'
--- StatisticsPluginUI/nbproject/project.xml 2010-06-22 16:26:18 +0000
+++ StatisticsPluginUI/nbproject/project.xml 2010-12-11 15:49:16 +0000
@@ -7,6 +7,22 @@
<suite-component/>
<module-dependencies>
<dependency>
+ <code-name-base>org.gephi.data.attributes.api</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>0.7.1</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+ <code-name-base>org.gephi.dynamic.api</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <specification-version>0.7</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
<code-name-base>org.gephi.statistics.api</code-name-base>
<build-prerequisite/>
<compile-dependency/>
=== modified file 'StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/Bundle.properties'
--- StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/Bundle.properties 2010-06-06 15:55:26 +0000
+++ StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/Bundle.properties 2010-12-11 15:49:16 +0000
@@ -62,3 +62,12 @@
EigenvectorCentralityPanel.directedButton.text=Directed
EigenvectorCentralityPanel.undirectedButton.text=UnDirected
GraphDistancePanel.normalizeButton.text=Normalize Centralities in [0,1]
+DynamicPanel.timeIntervalLabel.AccessibleContext.accessibleName=timeIntervalLabel
+DynamicPanel.jLabel1.AccessibleContext.accessibleName=separatorTimeInterval
+DynamicPanel.windowLabel.AccessibleContext.accessibleName=windowLabel
+DynamicPanel.estimatorLabel.AccessibleContext.accessibleName=estimatorLabel
+DynamicPanel.separatorTimeInterval2.text=-
+DynamicPanel.separatorTimeInterval1.text=-
+DynamicPanel.timeIntervalLabel.text=Set a time interval:
+DynamicPanel.windowLabel.text=Set a window as a part of the time interval (in %):
+DynamicPanel.estimatorLabel.text=Set an estimator:
=== modified file 'StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DegreeDistributionPanel.form'
--- StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DegreeDistributionPanel.form 2010-02-16 10:56:02 +0000
+++ StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DegreeDistributionPanel.form 2010-12-11 15:49:16 +0000
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" ?>
+<?xml version="1.1" encoding="UTF-8" ?>
<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
<NonVisualComponents>
@@ -41,7 +41,7 @@
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Component id="undirectedRadioButton" min="-2" max="-2" attributes="0"/>
<EmptySpace min="-2" pref="96" max="-2" attributes="0"/>
- <Component id="descriptionLabel" pref="2" max="32767" attributes="0"/>
+ <Component id="descriptionLabel" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
@@ -92,6 +92,9 @@
<ResourceString bundle="org/gephi/ui/statistics/plugin/Bundle.properties" key="DegreeDistributionPanel.header.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
</Property>
</Properties>
+ <AuxValues>
+ <AuxValue name="JavaCodeGenerator_SerializeTo" type="java.lang.String" value="DegreeDistributionPanel_header"/>
+ </AuxValues>
</Component>
</SubComponents>
</Form>
=== modified file 'StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DegreeDistributionPanel.java'
--- StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DegreeDistributionPanel.java 2010-08-22 21:06:56 +0000
+++ StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DegreeDistributionPanel.java 2010-12-11 15:49:16 +0000
@@ -88,7 +88,7 @@
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(undirectedRadioButton)
.addGap(96, 96, 96)
- .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 2, Short.MAX_VALUE)
+ .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
}// </editor-fold>//GEN-END:initComponents
=== added file 'StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DynamicDegreeDistributionPanel.java'
--- StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DynamicDegreeDistributionPanel.java 1970-01-01 00:00:00 +0000
+++ StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DynamicDegreeDistributionPanel.java 2010-12-11 15:49:16 +0000
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2008-2010 Gephi
+ * Authors : Cezary Bartosiak
+ * 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 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Gephi. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.gephi.ui.statistics.plugin;
+
+/**
+ * Dynamic degree distribution panel.
+ *
+ * @author Cezary Bartosiak
+ */
+public class DynamicDegreeDistributionPanel extends DynamicPanel {
+ private DegreeDistributionPanel panel = new DegreeDistributionPanel();
+
+ public DynamicDegreeDistributionPanel() {
+ setContent(panel, 150);
+ }
+
+ public boolean isDirected() {
+ return panel.isDirected();
+ }
+
+ public void setDirected(boolean directed) {
+ panel.setDirected(directed);
+ }
+}
=== added file 'StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DynamicDegreeDistributionUI.java'
--- StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DynamicDegreeDistributionUI.java 1970-01-01 00:00:00 +0000
+++ StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DynamicDegreeDistributionUI.java 2010-12-11 15:49:16 +0000
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2008-2010 Gephi
+ * Authors : Cezary Bartosiak
+ * 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 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Gephi. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.gephi.ui.statistics.plugin;
+
+import javax.swing.JPanel;
+import org.gephi.statistics.plugin.DynamicDegreeDistribution;
+import org.gephi.statistics.spi.Statistics;
+import org.gephi.statistics.spi.StatisticsUI;
+import org.openide.util.lookup.ServiceProvider;
+
+/**
+ * UI for dynamic degree distribution.
+ *
+ * @author Cezary Bartosiak
+ */
+@ServiceProvider(service = StatisticsUI.class)
+public class DynamicDegreeDistributionUI implements StatisticsUI {
+ private DynamicDegreeDistributionPanel panel;
+ private DynamicDegreeDistribution metric;
+
+ public JPanel getSettingsPanel() {
+ panel = new DynamicDegreeDistributionPanel();
+ return panel;
+ }
+
+ public void setup(Statistics statistics) {
+ metric = (DynamicDegreeDistribution)statistics;
+ if (panel != null) {
+ panel.setDirected(metric.isDirected());
+ panel.setTimeInterval(metric.getTimeInterval());
+ panel.setWindow(metric.getWindow());
+ panel.setEstimator(metric.getEstimator());
+ }
+ }
+
+ public void unsetup() {
+ if (panel != null) {
+ metric.setDirected(panel.isDirected());
+ metric.setTimeInterval(panel.getTimeInterval());
+ metric.setWindow(panel.getWindow());
+ metric.setEstimator(panel.getEstimator());
+ }
+ metric = null;
+ panel = null;
+ }
+
+ public Class<? extends Statistics> getStatisticsClass() {
+ return DynamicDegreeDistribution.class;
+ }
+
+ public String getValue() {
+ return null;
+ }
+
+ public String getDisplayName() {
+ return "Dynamic Degree Power Law";
+ }
+
+ public String getCategory() {
+ return StatisticsUI.CATEGORY_NODE_OVERVIEW;
+ }
+
+ public int getPosition() {
+ return 101;
+ }
+}
=== added file 'StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DynamicPanel.form'
--- StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DynamicPanel.form 1970-01-01 00:00:00 +0000
+++ StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DynamicPanel.form 2010-12-11 15:49:16 +0000
@@ -0,0 +1,306 @@
+<?xml version="1.1" encoding="UTF-8" ?>
+
+<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
+ <NonVisualComponents>
+ <Container class="javax.swing.JPanel" name="jPanel1">
+
+ <Layout>
+ <DimensionLayout dim="0">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+ </Group>
+ </DimensionLayout>
+ <DimensionLayout dim="1">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <EmptySpace min="0" pref="100" max="32767" attributes="0"/>
+ </Group>
+ </DimensionLayout>
+ </Layout>
+ </Container>
+ </NonVisualComponents>
+ <Properties>
+ <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="[419, 381]"/>
+ </Property>
+ </Properties>
+ <AuxValues>
+ <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
+ <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
+ <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
+ <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
+ <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
+ <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
+ <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
+ <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
+ <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
+ </AuxValues>
+
+ <Layout>
+ <DimensionLayout dim="0">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Group type="102" alignment="0" attributes="0">
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="windowSlider" pref="399" max="32767" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ </Group>
+ <Group type="102" alignment="0" attributes="0">
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="estimatorLabel" min="-2" max="-2" attributes="0"/>
+ <EmptySpace pref="326" max="32767" attributes="0"/>
+ </Group>
+ <Group type="102" alignment="0" attributes="0">
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="estimatorComboBox" min="-2" pref="100" max="-2" attributes="1"/>
+ <EmptySpace min="-2" pref="309" max="-2" attributes="0"/>
+ </Group>
+ <Group type="102" alignment="0" attributes="0">
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="windowLabel" min="-2" max="-2" attributes="0"/>
+ <EmptySpace pref="168" max="32767" attributes="0"/>
+ </Group>
+ <Group type="102" alignment="0" attributes="0">
+ <EmptySpace max="-2" attributes="0"/>
+ <Group type="103" groupAlignment="1" attributes="0">
+ <Component id="timeIntervalLabel" alignment="0" min="-2" max="-2" attributes="0"/>
+ <Group type="102" alignment="0" attributes="0">
+ <Group type="103" groupAlignment="1" max="-2" attributes="0">
+ <Group type="102" alignment="0" attributes="1">
+ <Component id="beginHourSpinner" min="-2" pref="42" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="beginMinuteSpinner" min="-2" pref="42" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="beginSecondSpinner" min="-2" pref="42" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="separatorTimeInterval2" max="32767" attributes="0"/>
+ </Group>
+ <Group type="102" alignment="0" attributes="0">
+ <Component id="beginDatePicker" min="-2" pref="139" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="separatorTimeInterval1" min="-2" max="-2" attributes="0"/>
+ </Group>
+ </Group>
+ <EmptySpace max="-2" attributes="0"/>
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Group type="102" alignment="0" attributes="0">
+ <Component id="endHourSpinner" min="-2" pref="42" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="endMinuteSpinner" min="-2" pref="42" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="endSecondSpinner" min="-2" pref="42" max="-2" attributes="0"/>
+ </Group>
+ <Component id="endDatePicker" alignment="0" min="-2" pref="139" max="-2" attributes="0"/>
+ </Group>
+ </Group>
+ </Group>
+ <EmptySpace pref="119" max="32767" attributes="0"/>
+ </Group>
+ <Component id="separator" alignment="0" pref="419" max="32767" attributes="0"/>
+ <Component id="content" alignment="0" max="32767" attributes="0"/>
+ </Group>
+ </DimensionLayout>
+ <DimensionLayout dim="1">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <Group type="102" alignment="1" attributes="0">
+ <Component id="content" max="32767" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="separator" min="-2" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="timeIntervalLabel" min="-2" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ <Group type="103" groupAlignment="3" attributes="0">
+ <Component id="beginDatePicker" alignment="3" min="-2" max="-2" attributes="0"/>
+ <Component id="separatorTimeInterval1" alignment="3" min="-2" max="-2" attributes="0"/>
+ <Component id="endDatePicker" alignment="3" min="-2" max="-2" attributes="0"/>
+ </Group>
+ <EmptySpace max="-2" attributes="0"/>
+ <Group type="103" groupAlignment="3" attributes="0">
+ <Component id="beginHourSpinner" alignment="3" min="-2" max="-2" attributes="0"/>
+ <Component id="beginMinuteSpinner" alignment="3" min="-2" max="-2" attributes="0"/>
+ <Component id="beginSecondSpinner" alignment="3" min="-2" max="-2" attributes="0"/>
+ <Component id="separatorTimeInterval2" alignment="3" min="-2" max="-2" attributes="0"/>
+ <Component id="endHourSpinner" alignment="3" min="-2" max="-2" attributes="0"/>
+ <Component id="endMinuteSpinner" alignment="3" min="-2" max="-2" attributes="0"/>
+ <Component id="endSecondSpinner" alignment="3" min="-2" max="-2" attributes="0"/>
+ </Group>
+ <EmptySpace type="unrelated" max="-2" attributes="0"/>
+ <Component id="windowLabel" min="-2" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="windowSlider" min="-2" max="-2" attributes="0"/>
+ <EmptySpace type="unrelated" max="-2" attributes="0"/>
+ <Component id="estimatorLabel" min="-2" max="-2" attributes="0"/>
+ <EmptySpace max="-2" attributes="0"/>
+ <Component id="estimatorComboBox" min="-2" max="-2" attributes="0"/>
+ <EmptySpace min="-2" max="-2" attributes="0"/>
+ </Group>
+ </Group>
+ </DimensionLayout>
+ </Layout>
+ <SubComponents>
+ <Component class="javax.swing.JLabel" name="timeIntervalLabel">
+ <Properties>
+ <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/gephi/ui/statistics/plugin/Bundle.properties" key="DynamicPanel.timeIntervalLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+ </Property>
+ </Properties>
+ <AccessibilityProperties>
+ <Property name="AccessibleContext.accessibleName" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/gephi/ui/statistics/plugin/Bundle.properties" key="DynamicPanel.timeIntervalLabel.AccessibleContext.accessibleName" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+ </Property>
+ </AccessibilityProperties>
+ </Component>
+ <Component class="javax.swing.JLabel" name="windowLabel">
+ <Properties>
+ <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/gephi/ui/statistics/plugin/Bundle.properties" key="DynamicPanel.windowLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+ </Property>
+ </Properties>
+ <AccessibilityProperties>
+ <Property name="AccessibleContext.accessibleName" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/gephi/ui/statistics/plugin/Bundle.properties" key="DynamicPanel.windowLabel.AccessibleContext.accessibleName" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+ </Property>
+ </AccessibilityProperties>
+ </Component>
+ <Component class="javax.swing.JLabel" name="separatorTimeInterval1">
+ <Properties>
+ <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/gephi/ui/statistics/plugin/Bundle.properties" key="DynamicPanel.separatorTimeInterval1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+ </Property>
+ </Properties>
+ <AccessibilityProperties>
+ <Property name="AccessibleContext.accessibleName" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/gephi/ui/statistics/plugin/Bundle.properties" key="DynamicPanel.jLabel1.AccessibleContext.accessibleName" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+ </Property>
+ </AccessibilityProperties>
+ </Component>
+ <Component class="javax.swing.JComboBox" name="estimatorComboBox">
+ <Properties>
+ <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.editors2.ComboBoxModelEditor">
+ <StringArray count="5">
+ <StringItem index="0" value="FIRST"/>
+ <StringItem index="1" value="LAST"/>
+ <StringItem index="2" value="MEDIAN"/>
+ <StringItem index="3" value="MODE"/>
+ <StringItem index="4" value=" "/>
+ </StringArray>
+ </Property>
+ </Properties>
+ </Component>
+ <Component class="javax.swing.JLabel" name="estimatorLabel">
+ <Properties>
+ <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/gephi/ui/statistics/plugin/Bundle.properties" key="DynamicPanel.estimatorLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+ </Property>
+ </Properties>
+ <AccessibilityProperties>
+ <Property name="AccessibleContext.accessibleName" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/gephi/ui/statistics/plugin/Bundle.properties" key="DynamicPanel.estimatorLabel.AccessibleContext.accessibleName" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+ </Property>
+ </AccessibilityProperties>
+ </Component>
+ <Container class="javax.swing.JPanel" name="content">
+ <AuxValues>
+ <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="4"/>
+ </AuxValues>
+
+ <Layout>
+ <DimensionLayout dim="0">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <EmptySpace min="0" pref="419" max="32767" attributes="0"/>
+ </Group>
+ </DimensionLayout>
+ <DimensionLayout dim="1">
+ <Group type="103" groupAlignment="0" attributes="0">
+ <EmptySpace min="0" pref="161" max="32767" attributes="0"/>
+ </Group>
+ </DimensionLayout>
+ </Layout>
+ </Container>
+ <Component class="javax.swing.JSlider" name="windowSlider">
+ <Properties>
+ <Property name="majorTickSpacing" type="int" value="10"/>
+ <Property name="minorTickSpacing" type="int" value="1"/>
+ <Property name="paintLabels" type="boolean" value="true"/>
+ <Property name="paintTicks" type="boolean" value="true"/>
+ <Property name="snapToTicks" type="boolean" value="true"/>
+ <Property name="value" type="int" value="100"/>
+ </Properties>
+ </Component>
+ <Component class="javax.swing.JSeparator" name="separator">
+ </Component>
+ <Component class="org.jdesktop.swingx.JXDatePicker" name="beginDatePicker">
+ <Properties>
+ <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="[150, 22]"/>
+ </Property>
+ <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="[150, 22]"/>
+ </Property>
+ <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="[150, 22]"/>
+ </Property>
+ </Properties>
+ </Component>
+ <Component class="org.jdesktop.swingx.JXDatePicker" name="endDatePicker">
+ <Properties>
+ <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="[150, 22]"/>
+ </Property>
+ <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="[150, 22]"/>
+ </Property>
+ <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
+ <Dimension value="[150, 22]"/>
+ </Property>
+ </Properties>
+ </Component>
+ <Component class="javax.swing.JSpinner" name="beginHourSpinner">
+ <Properties>
+ <Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
+ <SpinnerModel initial="0" maximum="23" minimum="0" numberType="java.lang.Integer" stepSize="1" type="number"/>
+ </Property>
+ </Properties>
+ </Component>
+ <Component class="javax.swing.JSpinner" name="beginMinuteSpinner">
+ <Properties>
+ <Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
+ <SpinnerModel initial="0" maximum="59" minimum="0" numberType="java.lang.Integer" stepSize="1" type="number"/>
+ </Property>
+ </Properties>
+ </Component>
+ <Component class="javax.swing.JSpinner" name="beginSecondSpinner">
+ <Properties>
+ <Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
+ <SpinnerModel initial="0" maximum="59" minimum="0" numberType="java.lang.Integer" stepSize="1" type="number"/>
+ </Property>
+ </Properties>
+ </Component>
+ <Component class="javax.swing.JLabel" name="separatorTimeInterval2">
+ <Properties>
+ <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
+ <ResourceString bundle="org/gephi/ui/statistics/plugin/Bundle.properties" key="DynamicPanel.separatorTimeInterval2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
+ </Property>
+ </Properties>
+ </Component>
+ <Component class="javax.swing.JSpinner" name="endHourSpinner">
+ <Properties>
+ <Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
+ <SpinnerModel initial="0" maximum="23" minimum="0" numberType="java.lang.Integer" stepSize="1" type="number"/>
+ </Property>
+ </Properties>
+ </Component>
+ <Component class="javax.swing.JSpinner" name="endMinuteSpinner">
+ <Properties>
+ <Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
+ <SpinnerModel initial="0" maximum="59" minimum="0" numberType="java.lang.Integer" stepSize="1" type="number"/>
+ </Property>
+ </Properties>
+ </Component>
+ <Component class="javax.swing.JSpinner" name="endSecondSpinner">
+ <Properties>
+ <Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor">
+ <SpinnerModel initial="0" maximum="59" minimum="0" numberType="java.lang.Integer" stepSize="1" type="number"/>
+ </Property>
+ </Properties>
+ </Component>
+ </SubComponents>
+</Form>
=== added file 'StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DynamicPanel.java'
--- StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DynamicPanel.java 1970-01-01 00:00:00 +0000
+++ StatisticsPluginUI/src/org/gephi/ui/statistics/plugin/DynamicPanel.java 2010-12-11 15:49:16 +0000
@@ -0,0 +1,345 @@
+/*
+ * Copyright 2008-2010 Gephi
+ * Authors : Cezary Bartosiak
+ * 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 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Gephi. If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.gephi.ui.statistics.plugin;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import javax.swing.JPanel;
+import org.gephi.data.attributes.api.Estimator;
+import org.gephi.data.attributes.type.TimeInterval;
+import org.gephi.dynamic.DynamicUtilities;
+
+/**
+ * A base class for all dynamic panels.
+ *
+ * @author Cezary Bartosiak
+ */
+public class DynamicPanel extends javax.swing.JPanel {
+ /** Creates new form DynamicPanel */
+ public DynamicPanel() {
+ initComponents();
+ }
+
+ public TimeInterval getTimeInterval() {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ String begin = sdf.format(beginDatePicker.getDate());
+ String end = sdf.format(endDatePicker.getDate());
+ int beginHour = (Integer)beginHourSpinner.getValue();
+ int beginMinute = (Integer)beginMinuteSpinner.getValue();
+ int beginSecond = (Integer)beginSecondSpinner.getValue();
+ int endHour = (Integer)endHourSpinner.getValue();
+ int endMinute = (Integer)endMinuteSpinner.getValue();
+ int endSecond = (Integer)endSecondSpinner.getValue();
+ begin += "T" + (beginHour < 10 ? "0" + beginHour : beginHour);
+ begin += ":" + (beginMinute < 10 ? "0" + beginMinute : beginMinute);
+ begin += ":" + (beginSecond < 10 ? "0" + beginSecond : beginSecond);
+ end += "T" + (endHour < 10 ? "0" + endHour : endHour);
+ end += ":" + (endMinute < 10 ? "0" + endMinute : endMinute);
+ end += ":" + (endSecond < 10 ? "0" + endSecond : endSecond);
+
+ return new TimeInterval(
+ DynamicUtilities.getDoubleFromXMLDateString(begin),
+ DynamicUtilities.getDoubleFromXMLDateString(end)
+ );
+ }
+
+ public double getWindow() {
+ TimeInterval timeInterval = getTimeInterval();
+ return windowSlider.getValue() / 100.0 * (timeInterval.getHigh() - timeInterval.getLow());
+ }
+
+ public Estimator getEstimator() {
+ switch (estimatorComboBox.getSelectedIndex()) {
+ case 0: // FIRST
+ return Estimator.FIRST;
+ case 1: // LAST
+ return Estimator.LAST;
+ case 2: // MEDIAN
+ return Estimator.MEDIAN;
+ case 3: // MODE
+ return Estimator.MODE;
+ default:
+ return Estimator.FIRST;
+ }
+ }
+
+ public void setTimeInterval(TimeInterval timeInterval) {
+ try {
+ String begin = DynamicUtilities.getXMLDateStringFromDouble(timeInterval.getLow()).replace('T', ' ').
+ substring(0, 19);
+ String beginDate = begin.split(" ")[0];
+ String beginTime = begin.split(" ")[1];
+ String end = DynamicUtilities.getXMLDateStringFromDouble(timeInterval.getHigh()).replace('T', ' ').
+ substring(0, 19);
+ String endDate = end.split(" ")[0];
+ String endTime = end.split(" ")[1];
+
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ beginDatePicker.setDate(sdf.parse(beginDate));
+ beginHourSpinner.setValue(Integer.parseInt(beginTime.split(":")[0]));
+ beginMinuteSpinner.setValue(Integer.parseInt(beginTime.split(":")[1]));
+ beginSecondSpinner.setValue(Integer.parseInt(beginTime.split(":")[2]));
+ endDatePicker.setDate(sdf.parse(endDate));
+ endHourSpinner.setValue(Integer.parseInt(endTime.split(":")[0]));
+ endMinuteSpinner.setValue(Integer.parseInt(endTime.split(":")[1]));
+ endSecondSpinner.setValue(Integer.parseInt(endTime.split(":")[2]));
+ }
+ catch (Exception ex) {
+ beginDatePicker.setDate(new Date());
+ beginHourSpinner.setValue(0);
+ beginMinuteSpinner.setValue(0);
+ beginSecondSpinner.setValue(0);
+ endDatePicker.setDate(new Date());
+ endHourSpinner.setValue(23);
+ endMinuteSpinner.setValue(59);
+ endSecondSpinner.setValue(59);
+ }
+ }
+
+ public void setWindow(double window) {
+ TimeInterval timeInterval = getTimeInterval();
+ if (window > timeInterval.getHigh() - timeInterval.getLow() || Double.compare(window, 0.0) == 0)
+ windowSlider.setValue(100);
+ else windowSlider.setValue((int)Math.round(window / (timeInterval.getHigh() - timeInterval.getLow()) * 100));
+ }
+
+ public void setEstimator(Estimator estimator) {
+ switch (estimator) {
+ case FIRST:
+ estimatorComboBox.setSelectedIndex(0);
+ break;
+ case LAST:
+ estimatorComboBox.setSelectedIndex(1);
+ break;
+ case MEDIAN:
+ estimatorComboBox.setSelectedIndex(2);
+ break;
+ case MODE:
+ estimatorComboBox.setSelectedIndex(3);
+ break;
+ default:
+ estimatorComboBox.setSelectedIndex(0);
+ break;
+ }
+ }
+
+ protected void setContent(JPanel panel, int height) {
+ javax.swing.GroupLayout contentLayout = new javax.swing.GroupLayout(content);
+ content.setLayout(contentLayout);
+ contentLayout.setHorizontalGroup(
+ contentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(panel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
+ Short.MAX_VALUE)
+ );
+ contentLayout.setVerticalGroup(
+ contentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(panel, height, height, height)
+ );
+ }
+
+ /** This method is called from within the constructor to
+ * initialize the form.
+ * WARNING: Do NOT modify this code. The content of this method is
+ * always regenerated by the Form Editor.
+ */
+ @SuppressWarnings("unchecked")
+ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
+ private void initComponents() {
+ timeIntervalLabel = new javax.swing.JLabel();
+ windowLabel = new javax.swing.JLabel();
+ separatorTimeInterval1 = new javax.swing.JLabel();
+ estimatorComboBox = new javax.swing.JComboBox();
+ estimatorLabel = new javax.swing.JLabel();
+ content = new javax.swing.JPanel();
+ windowSlider = new javax.swing.JSlider();
+ separator = new javax.swing.JSeparator();
+ beginDatePicker = new org.jdesktop.swingx.JXDatePicker();
+ endDatePicker = new org.jdesktop.swingx.JXDatePicker();
+ beginHourSpinner = new javax.swing.JSpinner();
+ beginMinuteSpinner = new javax.swing.JSpinner();
+ beginSecondSpinner = new javax.swing.JSpinner();
+ separatorTimeInterval2 = new javax.swing.JLabel();
+ endHourSpinner = new javax.swing.JSpinner();
+ endMinuteSpinner = new javax.swing.JSpinner();
+ endSecondSpinner = new javax.swing.JSpinner();
+
+ setPreferredSize(new java.awt.Dimension(419, 381));
+
+ timeIntervalLabel.setText(org.openide.util.NbBundle.getMessage(DynamicPanel.class, "DynamicPanel.timeIntervalLabel.text")); // NOI18N
+
+ windowLabel.setText(org.openide.util.NbBundle.getMessage(DynamicPanel.class, "DynamicPanel.windowLabel.text")); // NOI18N
+
+ separatorTimeInterval1.setText(org.openide.util.NbBundle.getMessage(DynamicPanel.class, "DynamicPanel.separatorTimeInterval1.text")); // NOI18N
+
+ estimatorComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "FIRST", "LAST", "MEDIAN", "MODE", " " }));
+
+ estimatorLabel.setText(org.openide.util.NbBundle.getMessage(DynamicPanel.class, "DynamicPanel.estimatorLabel.text")); // NOI18N
+
+ javax.swing.GroupLayout contentLayout = new javax.swing.GroupLayout(content);
+ content.setLayout(contentLayout);
+ contentLayout.setHorizontalGroup(
+ contentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGap(0, 419, Short.MAX_VALUE)
+ );
+ contentLayout.setVerticalGroup(
+ contentLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGap(0, 161, Short.MAX_VALUE)
+ );
+
+ windowSlider.setMajorTickSpacing(10);
+ windowSlider.setMinorTickSpacing(1);
+ windowSlider.setPaintLabels(true);
+ windowSlider.setPaintTicks(true);
+ windowSlider.setSnapToTicks(true);
+ windowSlider.setValue(100);
+
+ beginDatePicker.setMaximumSize(new java.awt.Dimension(150, 22));
+ beginDatePicker.setMinimumSize(new java.awt.Dimension(150, 22));
+ beginDatePicker.setPreferredSize(new java.awt.Dimension(150, 22));
+
+ endDatePicker.setMaximumSize(new java.awt.Dimension(150, 22));
+ endDatePicker.setMinimumSize(new java.awt.Dimension(150, 22));
+ endDatePicker.setPreferredSize(new java.awt.Dimension(150, 22));
+
+ beginHourSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, 23, 1));
+
+ beginMinuteSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, 59, 1));
+
+ beginSecondSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, 59, 1));
+
+ separatorTimeInterval2.setText(org.openide.util.NbBundle.getMessage(DynamicPanel.class, "DynamicPanel.separatorTimeInterval2.text")); // NOI18N
+
+ endHourSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, 23, 1));
+
+ endMinuteSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, 59, 1));
+
+ endSecondSpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, 59, 1));
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
+ this.setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(windowSlider, javax.swing.GroupLayout.DEFAULT_SIZE, 399, Short.MAX_VALUE)
+ .addContainerGap())
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(estimatorLabel)
+ .addContainerGap(326, Short.MAX_VALUE))
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(estimatorComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addGap(309, 309, 309))
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addComponent(windowLabel)
+ .addContainerGap(168, Short.MAX_VALUE))
+ .addGroup(layout.createSequentialGroup()
+ .addContainerGap()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
+ .addComponent(timeIntervalLabel, javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
+ .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
+ .addComponent(beginHourSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(beginMinuteSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(beginSecondSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(separatorTimeInterval2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
+ .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
+ .addComponent(beginDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(separatorTimeInterval1)))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addComponent(endHourSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(endMinuteSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(endSecondSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addComponent(endDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE))))
+ .addContainerGap(119, Short.MAX_VALUE))
+ .addComponent(separator, javax.swing.GroupLayout.DEFAULT_SIZE, 419, Short.MAX_VALUE)
+ .addComponent(content, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addComponent(content, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(timeIntervalLabel)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(beginDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(separatorTimeInterval1)
+ .addComponent(endDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
+ .addComponent(beginHourSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(beginMinuteSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(beginSecondSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(separatorTimeInterval2)
+ .addComponent(endHourSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(endMinuteSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addComponent(endSecondSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addComponent(windowLabel)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(windowSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
+ .addComponent(estimatorLabel)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(estimatorComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
+ .addContainerGap())
+ );
+
+ timeIntervalLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(DynamicPanel.class, "DynamicPanel.timeIntervalLabel.AccessibleContext.accessibleName")); // NOI18N
+ windowLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(DynamicPanel.class, "DynamicPanel.windowLabel.AccessibleContext.accessibleName")); // NOI18N
+ separatorTimeInterval1.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(DynamicPanel.class, "DynamicPanel.jLabel1.AccessibleContext.accessibleName")); // NOI18N
+ estimatorLabel.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(DynamicPanel.class, "DynamicPanel.estimatorLabel.AccessibleContext.accessibleName")); // NOI18N
+ }// </editor-fold>//GEN-END:initComponents
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private org.jdesktop.swingx.JXDatePicker beginDatePicker;
+ private javax.swing.JSpinner beginHourSpinner;
+ private javax.swing.JSpinner beginMinuteSpinner;
+ private javax.swing.JSpinner beginSecondSpinner;
+ private javax.swing.JPanel content;
+ private org.jdesktop.swingx.JXDatePicker endDatePicker;
+ private javax.swing.JSpinner endHourSpinner;
+ private javax.swing.JSpinner endMinuteSpinner;
+ private javax.swing.JSpinner endSecondSpinner;
+ private javax.swing.JComboBox estimatorComboBox;
+ private javax.swing.JLabel estimatorLabel;
+ private javax.swing.JSeparator separator;
+ private javax.swing.JLabel separatorTimeInterval1;
+ private javax.swing.JLabel separatorTimeInterval2;
+ private javax.swing.JLabel timeIntervalLabel;
+ private javax.swing.JLabel windowLabel;
+ private javax.swing.JSlider windowSlider;
+ // End of variables declaration//GEN-END:variables
+}
=== modified file 'nbproject/platform.properties'
--- nbproject/platform.properties 2010-06-22 19:50:29 +0000
+++ nbproject/platform.properties 2010-12-11 15:49:16 +0000
@@ -12,4 +12,5 @@
org.openide.compat,\
org.openide.options,\
org.openide.util.enumerations
+nbjdk.active=JDK_1.6
nbplatform.active=default
=== added directory 'nbproject/private/profiler'
=== added file 'nbproject/private/profiler/configurations.xml'
--- nbproject/private/profiler/configurations.xml 1970-01-01 00:00:00 +0000
+++ nbproject/private/profiler/configurations.xml 2010-12-11 15:49:16 +0000
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+<entry key="2_profiler.settings.code.region.cpu.res.buf.size">1000</entry>
+<entry key="2_profiler.settings.sort.results.by.thread.cpu.time">false</entry>
+<entry key="0_profiler.settings.instrumentation.filter.selectedprofiler.filter.type">profiler.simple.filter</entry>
+<entry key="0_profiler.settings.instrument.empty.methods">false</entry>
+<entry key="0_profiler.settings.instrumentation.filter.selectedprofiler.simple.filter.name"/>
+<entry key="1_profiler.settings.profiling.type">8</entry>
+<entry key="0_profiler.settings.cpu.exclude.wait.time">true</entry>
+<entry key="0_profiler.settings.override.working.dir"/>
+<entry key="1_profiler.settings.thread.cpu.timer.on">false</entry>
+<entry key="1_profiler.settings.instrumentation.root.methods.size">0</entry>
+<entry key="2_profiler.settings.override">false</entry>
+<entry key="profiler.settings.lastselected">1</entry>
+<entry key="2_profiler.settings.instrument.spawned.threads">false</entry>
+<entry key="0_profiler.settings.threads.monitoring.enabled">false</entry>
+<entry key="0_profiler.settings.istrument.getter.setter.methods">false</entry>
+<entry key="2_profiler.settings.instrumentation.filter.selectedprofiler.filter.type">profiler.simple.filter</entry>
+<entry key="2_profiler.settings.n.profiled.threads.limit">32</entry>
+<entry key="1_profiler.settings.sort.results.by.thread.cpu.time">false</entry>
+<entry key="2_profiler.settings.instr.scheme">1</entry>
+<entry key="1_profiler.settings.instrument.method.invoke">true</entry>
+<entry key="1_profiler.settings.instr.scheme">3</entry>
+<entry key="2_profiler.settings.sampling.interval">10</entry>
+<entry key="0_profiler.settings.instr.scheme">1</entry>
+<entry key="1_profiler.settings.run.gc.on.get.results.in.memory.profiling">true</entry>
+<entry key="2_profiler.settings.settings.name">Analyze Memory</entry>
+<entry key="0_profiler.settings.sort.results.by.thread.cpu.time">false</entry>
+<entry key="0_profiler.settings.profiling.type">1</entry>
+<entry key="1_profiler.settings.cpu.exclude.wait.time">true</entry>
+<entry key="2_profiler.settings.obj.alloc.stack.sampling.interval">10</entry>
+<entry key="1_profiler.settings.obj.alloc.stack.sampling.depth">0</entry>
+<entry key="1_profiler.settings.cpu.quick.filterprofiler.filter.type">profiler.simple.filter</entry>
+<entry key="1_profiler.settings.instrumentation.marker.methods.size">0</entry>
+<entry key="2_profiler.settings.thread.cpu.timer.on">false</entry>
+<entry key="0_profiler.settigns.ispreset">true</entry>
+<entry key="0_profiler.settings.instrumentation.filter.selectedprofiler.simple.filter.value"/>
+<entry key="2_profiler.settings.override.working.dir"/>
+<entry key="0_profiler.settings.cpu.quick.filterprofiler.simple.filter.type">1</entry>
+<entry key="2_profiler.settings.cpu.quick.filterprofiler.simple.filter.value"/>
+<entry key="2_profiler.settings.override.jvm.args"/>
+<entry key="0_profiler.settings.profile.underlying.framework">false</entry>
+<entry key="2_profiler.settings.profile.underlying.framework">false</entry>
+<entry key="2_profiler.settings.cpu.exclude.wait.time">true</entry>
+<entry key="2_profiler.settings.threads.monitoring.enabled">false</entry>
+<entry key="1_profiler.settings.instrument.spawned.threads">false</entry>
+<entry key="1_profiler.settings.n.profiled.threads.limit">32</entry>
+<entry key="0_profiler.settings.cpu.quick.filterprofiler.simple.filter.name">Quick filter...</entry>
+<entry key="2_profiler.settings.instrumentation.root.methods.size">0</entry>
+<entry key="2_profiler.settings.instrument.empty.methods">false</entry>
+<entry key="2_profiler.settings.instrumentation.filter.selectedprofiler.simple.filter.type">0</entry>
+<entry key="1_profiler.settings.instrumentation.filter.selectedprofiler.simple.filter.value">{$project.subprojects.classes.only}</entry>
+<entry key="1_profiler.settings.sampling.interval">10</entry>
+<entry key="2_profiler.settings.cpu.profiling.type">0</entry>
+<entry key="0_profiler.settings.run.gc.on.get.results.in.memory.profiling">true</entry>
+<entry key="1_profiler.settigns.ispreset">true</entry>
+<entry key="2_profiler.settings.instrumentation.filter.selectedprofiler.simple.filter.name"/>
+<entry key="0_profiler.settings.instrument.method.invoke">true</entry>
+<entry key="0_profiler.settings.obj.alloc.stack.sampling.interval">10</entry>
+<entry key="1_profiler.settings.cpu.quick.filterprofiler.simple.filter.value"/>
+<entry key="1_profiler.settings.code.region.cpu.res.buf.size">1000</entry>
+<entry key="0_profiler.settings.instrumentation.marker.methods.size">0</entry>
+<entry key="1_profiler.settings.instrumentation.filter.selectedprofiler.filter.type">profiler.simple.filter</entry>
+<entry key="0_profiler.settings.override">false</entry>
+<entry key="1_profiler.settings.settings.name">Analyze Performance</entry>
+<entry key="2_profiler.settings.instrumentation.filter.selectedprofiler.simple.filter.value"/>
+<entry key="1_profiler.settings.cpu.quick.filterprofiler.simple.filter.type">1</entry>
+<entry key="1_profiler.settings.cpu.profiling.type">0</entry>
+<entry key="1_profiler.settings.override.jvm.args"/>
+<entry key="2_profiler.settings.obj.alloc.stack.sampling.depth">0</entry>
+<entry key="1_profiler.settings.instrument.empty.methods">false</entry>
+<entry key="0_profiler.settings.cpu.quick.filterprofiler.filter.type">profiler.simple.filter</entry>
+<entry key="1_profiler.settings.cpu.quick.filterprofiler.simple.filter.name">Quick filter...</entry>
+<entry key="2_profiler.settigns.ispreset">true</entry>
+<entry key="1_profiler.settings.threads.monitoring.enabled">false</entry>
+<entry key="0_profiler.settings.instrumentation.root.methods.size">0</entry>
+<entry key="1_profiler.settings.override.working.dir"/>
+<entry key="1_profiler.settings.instrumentation.filter.selectedprofiler.simple.filter.type">2</entry>
+<entry key="0_profiler.settings.n.profiled.threads.limit">32</entry>
+<entry key="0_profiler.settings.cpu.quick.filterprofiler.simple.filter.value"/>
+<entry key="0_profiler.settings.cpu.profiling.type">0</entry>
+<entry key="0_profiler.settings.instrument.spawned.threads">false</entry>
+<entry key="1_profiler.settings.instrumentation.filter.selectedprofiler.simple.filter.name">Profile project & subprojects classes</entry>
+<entry key="2_profiler.settings.instrumentation.marker.methods.size">0</entry>
+<entry key="0_profiler.settings.obj.alloc.stack.sampling.depth">0</entry>
+<entry key="2_profiler.settings.cpu.quick.filterprofiler.filter.type">profiler.simple.filter</entry>
+<entry key="0_profiler.settings.profilingpoints.enabled">true</entry>
+<entry key="2_profiler.settings.cpu.quick.filterprofiler.simple.filter.type">1</entry>
+<entry key="1_profiler.settings.override">false</entry>
+<entry key="1_profiler.settings.obj.alloc.stack.sampling.interval">10</entry>
+<entry key="2_profiler.settings.istrument.getter.setter.methods">false</entry>
+<entry key="0_profiler.settings.sampling.interval">10</entry>
+<entry key="1_profiler.settings.profile.underlying.framework">false</entry>
+<entry key="2_profiler.settings.instrument.method.invoke">true</entry>
+<entry key="1_profiler.settings.profilingpoints.enabled">true</entry>
+<entry key="1_profiler.settings.istrument.getter.setter.methods">false</entry>
+<entry key="2_profiler.settings.cpu.quick.filterprofiler.simple.filter.name">Quick filter...</entry>
+<entry key="0_profiler.settings.instrumentation.filter.selectedprofiler.simple.filter.type">0</entry>
+<entry key="0_profiler.settings.thread.cpu.timer.on">false</entry>
+<entry key="0_profiler.settings.override.jvm.args"/>
+<entry key="2_profiler.settings.profiling.type">2</entry>
+<entry key="0_profiler.settings.settings.name">Monitor Application</entry>
+<entry key="0_profiler.settings.code.region.cpu.res.buf.size">1000</entry>
+<entry key="2_profiler.settings.profilingpoints.enabled">true</entry>
+<entry key="2_profiler.settings.run.gc.on.get.results.in.memory.profiling">true</entry>
+</properties>
Follow ups