diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerLoader.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerLoader.java
index 3ab14baa8e81d6b2165d5e57b26d906df579d23b..ec04eb774ed2e501b279b4092fba799c3e4f9ffc 100644
--- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerLoader.java
+++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerLoader.java
@@ -41,6 +41,7 @@
*/
package org.gephi.io.importer.api;
+import org.gephi.graph.api.Interval;
import org.gephi.graph.api.TimeFormat;
import org.gephi.graph.api.TimeRepresentation;
import org.gephi.io.importer.spi.Importer;
@@ -231,6 +232,24 @@ public interface ContainerLoader {
public void setTimeFormat(TimeFormat timeFormat);
/**
+ * Sets the timestamp for the entire graph. All elements and all dynamic
+ * columns will automatically receive this timestamp when the graph is
+ * processed.
+ *
+ * @param timestamp timestamp
+ */
+ public void setTimestamp(String timestamp);
+
+ /**
+ * Sets the interval for the entire graph. All elements and all dynamic
+ * columns will automatically receive this interval when the graph is
+ * processed.
+ *
+ * @param start interval start
+ * @param end interval end
+ */
+ public void setInterval(String start, String end);
+
/**
* Sets the type of the id for elements.
*
@@ -238,6 +257,7 @@ public interface ContainerLoader {
*/
public void setElementIdType(ElementIdType type);
+ /**
* Sets the current time representation, either TIMESTAMP
or
* INTERVAL
.
*
@@ -247,6 +267,14 @@ public interface ContainerLoader {
*/
public void setTimeRepresentation(TimeRepresentation timeRepresentation);
+ /**
+ * Gets the current time representation, either TIMESTAMP
or
+ * INTERVAL
.
+ *
+ * @return time representation
+ */
+ public TimeRepresentation getTimeRepresentation();
+
/**
* Sets the time zone that is used to parse date and time.
*
diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerUnloader.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerUnloader.java
index 62a2b54460045821eddc1a087becd3416e8d6a07..91e3fe8abb7e625c5392eb78e584f6a8fa785dc1 100644
--- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerUnloader.java
+++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerUnloader.java
@@ -41,6 +41,7 @@
*/
package org.gephi.io.importer.api;
+import org.gephi.graph.api.Interval;
import org.gephi.graph.api.TimeFormat;
import org.gephi.graph.api.TimeRepresentation;
import org.gephi.io.processor.spi.Processor;
@@ -88,6 +89,10 @@ public interface ContainerUnloader {
public Class getEdgeTypeLabelClass();
+ public Double getTimestamp();
+
+ public Interval getInterval();
+
public ElementIdType getElementIdType();
//PARAMETERS GETTERS
diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ElementDraft.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ElementDraft.java
index 2be451e3815038df38dfa5c547494fc46d3b01f1..57d38af82ca74bedff9d3188886ddb7017bb0b50 100644
--- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ElementDraft.java
+++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ElementDraft.java
@@ -377,4 +377,8 @@ public interface ElementDraft {
public TimeSet getTimeSet();
public Iterable getColumns();
+
+ public Double getGraphTimestamp();
+
+ public Interval getGraphInterval();
}
diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ElementDraftImpl.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ElementDraftImpl.java
index 6fa4c6e02a739c168ea3c744b90c528bac3826bc..1a226f738adece96588cb1d2804f956984a04fbc 100644
--- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ElementDraftImpl.java
+++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ElementDraftImpl.java
@@ -85,6 +85,16 @@ public abstract class ElementDraftImpl implements ElementDraft {
abstract ColumnDraft getColumn(String key, Class type);
+ @Override
+ public Double getGraphTimestamp() {
+ return container.getTimestamp();
+ }
+
+ @Override
+ public Interval getGraphInterval() {
+ return container.getInterval();
+ }
+
@Override
public String getId() {
return id;
diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerImpl.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerImpl.java
index 16a4841aa76e3778a28bd470e487dcb7ddea10cb..efb2e1b55d95d095b06c1e27b1e042d9e728db59 100644
--- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerImpl.java
+++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerImpl.java
@@ -57,6 +57,7 @@ import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import org.gephi.graph.api.AttributeUtils;
+import org.gephi.graph.api.Interval;
import org.gephi.graph.api.TimeFormat;
import org.gephi.graph.api.TimeRepresentation;
import org.gephi.io.importer.api.ColumnDraft;
@@ -114,6 +115,8 @@ public class ImportContainerImpl implements Container, ContainerLoader, Containe
private TimeFormat timeFormat = TimeFormat.DOUBLE;
private TimeRepresentation timeRepresentation = TimeRepresentation.INTERVAL;
private DateTimeZone timeZone = DateTimeZone.getDefault();
+ private Double timestamp;
+ private Interval interval;
//Report flag
private boolean reportedUnknownNode;
private boolean reportedParallelEdges;
@@ -528,6 +531,48 @@ public class ImportContainerImpl implements Container, ContainerLoader, Containe
}
@Override
+ public void setTimestamp(String timestamp) {
+ try {
+ double t = timeFormat.equals(TimeFormat.DOUBLE) ? Double.parseDouble(timestamp) : AttributeUtils.parseDateTime(timestamp);
+ this.timestamp = t;
+ } catch (Exception e) {
+ report.logIssue(new Issue(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Timestamp_Parse_Error", timestamp), Level.SEVERE));
+ return;
+ }
+ report.log(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerLog.GraphTimestamp", timestamp));
+ }
+
+ @Override
+ public void setInterval(String startDateTime, String endDateTime) {
+ try {
+ double start, end;
+ if (startDateTime == null || startDateTime.isEmpty() || "-inf".equalsIgnoreCase(startDateTime) || "-infinity".equalsIgnoreCase(startDateTime)) {
+ start = Double.NEGATIVE_INFINITY;
+ } else {
+ start = timeFormat.equals(TimeFormat.DOUBLE) ? Double.parseDouble(startDateTime) : AttributeUtils.parseDateTime(startDateTime);
+ }
+ if (endDateTime == null || endDateTime.isEmpty() || "inf".equalsIgnoreCase(endDateTime) || "infinity".equalsIgnoreCase(endDateTime)) {
+ end = Double.POSITIVE_INFINITY;
+ } else {
+ end = timeFormat.equals(TimeFormat.DOUBLE) ? Double.parseDouble(endDateTime) : AttributeUtils.parseDateTime(endDateTime);
+ }
+ this.interval = new Interval(start, end);
+ } catch (Exception e) {
+ report.logIssue(new Issue(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Interval_Parse_Error", timestamp), Level.SEVERE));
+ return;
+ }
+ report.log(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerLog.GraphInterval", "[" + startDateTime + "," + endDateTime + "]"));
+ }
+
+ @Override
+ public Interval getInterval() {
+ return interval;
+ }
+
+ @Override
+ public Double getTimestamp() {
+ return timestamp;
+ }
@Override
public void setElementIdType(ElementIdType type) {
@@ -539,6 +584,8 @@ public class ImportContainerImpl implements Container, ContainerLoader, Containe
public ElementIdType getElementIdType() {
return elementIdType;
}
+
+ @Override
public boolean verify() {
//Edge weight zero or negative
for (EdgeDraftImpl edge : new NullFilterIterable(edgeList)) {
diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle.properties
index 86be00481d892f2961117d1d42f3e643606b61cd..c8a9a8fab02cb0a0a4217601b96141107adcdc2a 100644
--- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle.properties
+++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle.properties
@@ -8,6 +8,8 @@ ImportContainerLog.AddDynamicEdgeColumn = Edge column ''{0}'' (Dynamic {1})
ImportContainerLog.EdgeLabelType = Edge labels are of type ''{0}''
ImportContainerLog.TimeZone = Time zone is set at ''{0}''
ImportContainerLog.MultiGraphCount = Multi-graph with {0} different types
+ImportContainerLog.GraphTimestamp = Graph timestamp set at ''{0}''
+ImportContainerLog.GraphInterval = Graph interval set at ''{0}''
ImportContainerLog.ElementIdType = Element id type set at ''{0}''
ImportContainerException_nodeExist = Duplicated node id=''{0}''
@@ -28,6 +30,8 @@ ImportContainerException_Weight_Zero_Ignored = Edge weight is 0, the edge id=''{
ImportContainerException_ElementIdType_Parse_Error = The id type is configured to ''{0}'' but some elements id can't be parsed, defaulting to 'STRING'
ImportContainerException_Negative_Weight = Edge id=''{0}'' has a negative weight
ImportContainerException_Column_Type_Mismatch = A column ''{0}'' already exists but with a different type=''{1}''
+ImportContainerException_Timestamp_Parse_Error = The graph timestamp ''{0}'' could not be parsed
+ImportContainerException_Interval_Parse_Error = The graph interval ''{0}'' could not be parsed
ElementFactoryException_NullNodeId = Node id can't be null
ElementFactoryException_NullEdgeId = Edge id can't be null