21 #ifndef CSVGRAPHIMPORT_H
22 #define CSVGRAPHIMPORT_H
24 #include <tulip/CSVContentHandler.h>
25 #include <tulip/Graph.h>
26 #include <tulip/tulipconf.h>
28 #include <QMessageBox>
31 class PropertyInterface;
38 class TLP_QT_SCOPE CSVColumn {
40 CSVColumn(
const std::string& columnName=
"",
bool isUsed=
false,
const std::string& columnType=
""):name(columnName),used(isUsed),type(columnType) {
47 std::string columnName()
const {
60 std::string columnDataType()
const {
75 class TLP_QT_SCOPE CSVImportParameters {
77 CSVImportParameters(
unsigned int fromLine=0,
unsigned int toLine=UINT_MAX,
const std::vector<CSVColumn>& columns = std::vector<CSVColumn>());
78 virtual ~CSVImportParameters();
83 unsigned int columnNumber()
const;
88 bool importColumn(
unsigned int column)
const;
92 std::string getColumnName(
unsigned int column)
const;
96 std::string getColumnDataType(
unsigned int column)
const;
101 unsigned int getFirstLineIndex()
const;
105 unsigned int getLastLineIndex()
const;
109 bool importRow(
unsigned int row)
const;
111 unsigned int fromLine;
113 std::vector<CSVColumn> columns;
129 class TLP_QT_SCOPE CSVToGraphDataMapping {
131 virtual ~CSVToGraphDataMapping() {}
132 virtual std::pair<tlp::ElementType, std::vector<unsigned int> > getElementsForRow(
const std::vector<std::string>& tokens,
const std::vector<PropertyInterface*> props)=0;
133 virtual void init(
unsigned int rowNumber)=0;
142 class TLP_QT_SCOPE AbstractCSVToGraphDataMapping :
public CSVToGraphDataMapping {
145 const std::vector<unsigned int>& columnIds,
146 const std::vector<std::string>& propertyNames);
147 virtual ~AbstractCSVToGraphDataMapping() {}
149 void init(
unsigned int rowNumber);
150 std::pair<tlp::ElementType, std::vector<unsigned int> > getElementsForRow(
const std::vector<std::string>& tokens,
const std::vector<PropertyInterface*> props);
156 virtual unsigned int buildIndexForRow(
unsigned int row,
157 const std::vector<std::string>& keys)=0;
160 TLP_HASH_MAP<std::string,unsigned int> valueToId;
163 std::vector<unsigned int> columnIds;
164 std::vector<tlp::PropertyInterface*> keyProperties;
169 class TLP_QT_SCOPE CSVToNewNodeIdMapping:
public CSVToGraphDataMapping {
172 void init(
unsigned int rowNumber);
173 std::pair<tlp::ElementType, std::vector<unsigned int> > getElementsForRow(
const std::vector<std::string>& tokens,
const std::vector<PropertyInterface*> props);
183 class TLP_QT_SCOPE CSVToGraphNodeIdMapping:
public AbstractCSVToGraphDataMapping {
194 const std::vector<unsigned int>& columnIds,
195 const std::vector<std::string>& propertyNames,
196 bool createNode=
false);
197 void init(
unsigned int rowNumber);
199 unsigned int buildIndexForRow(
unsigned int row,
200 const std::vector<std::string>& keys);
202 bool createMissingNodes;
209 class TLP_QT_SCOPE CSVToGraphEdgeIdMapping:
public AbstractCSVToGraphDataMapping {
219 const std::vector<unsigned int>& columnIds,
220 const std::vector<std::string>& propertyNames);
222 unsigned int buildIndexForRow(
unsigned int row,
223 const std::vector<std::string>& keys);
231 class TLP_QT_SCOPE CSVToGraphEdgeSrcTgtMapping:
public CSVToGraphDataMapping {
243 CSVToGraphEdgeSrcTgtMapping(
tlp::Graph* graph,
244 const std::vector<unsigned int>& srcColumnIds,
245 const std::vector<unsigned int>& tgtColumnIds,
246 const std::vector<std::string>& srcPropNames,
247 const std::vector<std::string>& tgtPropNames,
248 bool createMissinElements=
false);
249 std::pair<tlp::ElementType,unsigned int> getElementForRow(
unsigned int row);
250 void init(
unsigned int lineNumbers);
251 std::pair<tlp::ElementType, std::vector<unsigned int> > getElementsForRow(
const std::vector<std::string>& tokens,
const std::vector<PropertyInterface*> props);
254 TLP_HASH_MAP<std::string,unsigned int> srcValueToId;
255 TLP_HASH_MAP<std::string,unsigned int> tgtValueToId;
256 std::vector<unsigned int> srcColumnIds;
257 std::vector<unsigned int> tgtColumnIds;
258 std::vector<tlp::PropertyInterface*> srcProperties;
259 std::vector<tlp::PropertyInterface*> tgtProperties;
260 bool sameSrcTgtProperties;
261 bool buildMissingElements;
268 class TLP_QT_SCOPE CSVImportColumnToGraphPropertyMapping {
270 virtual ~CSVImportColumnToGraphPropertyMapping() {}
286 class TLP_QT_SCOPE CSVImportColumnToGraphPropertyMappingProxy :
public CSVImportColumnToGraphPropertyMapping {
288 CSVImportColumnToGraphPropertyMappingProxy(
tlp::Graph* graph,
const CSVImportParameters& importParameters,QWidget* parent=NULL);
289 virtual ~CSVImportColumnToGraphPropertyMappingProxy() {}
295 CSVImportParameters importParameters;
296 TLP_HASH_MAP<unsigned int,tlp::PropertyInterface*>propertiesBuffer;
297 QMessageBox::StandardButton overwritePropertiesButton;
305 class TLP_QT_SCOPE CSVGraphImport :
public tlp::CSVContentHandler {
307 CSVGraphImport(CSVToGraphDataMapping* mapping,CSVImportColumnToGraphPropertyMapping* propertiesManager,
const CSVImportParameters& importParameters);
308 virtual ~CSVGraphImport();
310 void line(
unsigned int row,
const std::vector<std::string>& lineTokens);
311 void end(
unsigned int rowNumber,
unsigned int columnNumber);
314 CSVToGraphDataMapping* mapping;
315 CSVImportColumnToGraphPropertyMapping* propertiesManager;
316 CSVImportParameters importParameters;
320 #endif // CSVGRAPHIMPORT_H
PropertyInterface describes the interface of a graph property.