use of au.gov.asd.tac.constellation.plugins.importexport.SchemaDestination in project constellation by constellation-app.
the class ImportJDBCIO method saveParameters.
public static void saveParameters(final Window parentWindow, final JDBCImportController importController) {
final Preferences prefs = NbPreferences.forModule(ApplicationPreferenceKeys.class);
final String userDir = ApplicationPreferenceKeys.getUserDir(prefs);
final File delimIoDir = new File(userDir, IMPORT_JDBC_DIR);
if (!delimIoDir.exists()) {
delimIoDir.mkdir();
}
if (!delimIoDir.isDirectory()) {
final String msg = String.format("Can't create directory '%s'.", delimIoDir);
NotifyDisplayer.display(msg, NotifyDescriptor.ERROR_MESSAGE);
return;
}
final String templName = new TemplateListDialog(parentWindow, false).getName(delimIoDir);
if (templName != null) {
// A JSON document to store everything in.
// Two objects; the source data + the configuration data.
final ObjectMapper mapper = new ObjectMapper();
final ObjectNode rootNode = mapper.createObjectNode();
final ObjectNode source = rootNode.putObject(SOURCE);
source.put(SCHEMA_INIT, importController.isSchemaInitialised());
// We don't want to rely on a particular kind of graph being current when we load this definition.
// Therefore, we only save a schema factory as the destination.
final ImportDestination<?> importd = importController.getDestination();
final String destination;
if (importd instanceof SchemaDestination) {
destination = ((SchemaDestination) importd).getDestination().getName();
} else if (importd instanceof GraphDestination) {
destination = ((GraphDestination) importd).getGraph().getSchema().getFactory().getName();
} else {
throw new IllegalArgumentException(String.format("Unrecognised destination '%s'", importd));
}
source.put(DESTINATION, destination);
// One ImportDefinition per tab.
final ArrayNode definitionArray = rootNode.putArray(DEFINITIONS);
final List<ImportDefinition> definitions = importController.getDefinitions(false);
final String[] columns = importController.getCurrentColumns();
definitions.stream().forEach(impdef -> definitionCompute(definitionArray, columns, impdef));
mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
mapper.configure(SerializationFeature.CLOSE_CLOSEABLE, true);
final File f = new File(delimIoDir, FilenameEncoder.encode(templName + FileExtensionConstants.JSON));
try {
mapper.writeValue(f, rootNode);
StatusDisplayer.getDefault().setStatusText(String.format("Import definition saved to %s.", f.getPath()));
} catch (final IOException ex) {
LOGGER.log(Level.WARNING, ex.getMessage(), ex);
final String msg = String.format("Can't save import definition: %s", ex.getMessage());
final NotifyDescriptor nd = new NotifyDescriptor.Message(msg, NotifyDescriptor.ERROR_MESSAGE);
DialogDisplayer.getDefault().notify(nd);
}
}
}
use of au.gov.asd.tac.constellation.plugins.importexport.SchemaDestination in project constellation by constellation-app.
the class ImportJDBCIO method loadParameterFile.
private static void loadParameterFile(final JDBCImportController importController, final File delimIoDir, final String templName) {
try {
final ObjectMapper mapper = new ObjectMapper();
final JsonNode root = mapper.readTree(new File(delimIoDir, FilenameEncoder.encode(templName) + FileExtensionConstants.JSON));
final JsonNode source = root.get(SOURCE);
final boolean schemaInit = source.get(SCHEMA_INIT).booleanValue();
importController.setSchemaInitialised(schemaInit);
final String destination = source.get(DESTINATION).textValue();
final SchemaFactory schemaFactory = SchemaFactoryUtilities.getSchemaFactory(destination);
if (schemaFactory != null) {
importController.setDestination(new SchemaDestination(schemaFactory));
final List<ImportDefinition> definitions = new ArrayList<>();
final ArrayNode definitionsArray = (ArrayNode) root.withArray(DEFINITIONS);
for (final JsonNode definitionNode : definitionsArray) {
final int firstRow = definitionNode.get(FIRST_ROW).intValue();
final RowFilter filter = new RowFilter();
if (definitionNode.has(FILTER)) {
final JsonNode filterNode = definitionNode.get(FILTER);
final String script = filterNode.get(SCRIPT).textValue();
final JsonNode columnsArray = filterNode.withArray(COLUMNS);
final List<String> columns = new ArrayList<>();
for (final JsonNode column : columnsArray) {
columns.add(column.textValue());
}
filter.setScript(script);
filter.setColumns(columns.toArray(new String[columns.size()]));
}
final ImportDefinition impdef = new ImportDefinition("", firstRow, filter);
final JsonNode attributesNode = definitionNode.get(ATTRIBUTES);
for (final AttributeType attrType : AttributeType.values()) {
final ArrayNode columnArray = (ArrayNode) attributesNode.withArray(attrType.toString());
for (final JsonNode column : columnArray) {
final String columnLabel = column.get(COLUMN_LABEL).textValue();
final String label = column.get(ATTRIBUTE_LABEL).textValue();
if (!importController.hasAttribute(attrType.getElementType(), label)) {
// Manually created attribute.
final String type = column.get(ATTRIBUTE_TYPE).textValue();
final String descr = column.get(ATTRIBUTE_DESCRIPTION).textValue();
final NewAttribute a = new NewAttribute(attrType.getElementType(), type, label, descr);
importController.createManualAttribute(a);
}
final Attribute attribute = importController.getAttribute(attrType.getElementType(), label);
final AttributeTranslator translator = AttributeTranslator.getTranslator(column.get(TRANSLATOR).textValue());
final String args = column.get(TRANSLATOR_ARGS).textValue();
final String defaultValue = column.get(DEFAULT_VALUE).textValue();
final PluginParameters params = translator.createParameters();
translator.setParameterValues(params, args);
final ImportAttributeDefinition iad = new ImportAttributeDefinition(columnLabel, defaultValue, attribute, translator, params);
impdef.addDefinition(attrType, iad);
}
}
definitions.add(impdef);
}
importController.setClearManuallyAdded(false);
try {
((JDBCImportPane) importController.getStage()).update(importController, definitions);
} finally {
importController.setClearManuallyAdded(true);
}
} else {
final String msg = String.format("Can't find schema factory '%s'", destination);
final NotifyDescriptor nd = new NotifyDescriptor.Message(msg, NotifyDescriptor.ERROR_MESSAGE);
DialogDisplayer.getDefault().notify(nd);
}
} catch (final IOException ex) {
LOGGER.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
}
}
use of au.gov.asd.tac.constellation.plugins.importexport.SchemaDestination in project constellation by constellation-app.
the class JDBCImportController method processImport.
@Override
public void processImport() throws PluginException {
final List<ImportDefinition> definitions = configurationPane.createDefinitions(false);
final Graph importGraph = currentDestination.getGraph();
final boolean schema = schemaInitialised;
if (currentDestination instanceof SchemaDestination) {
final GraphManagerListener graphListener = new GraphManagerListener() {
private boolean opened;
@Override
public void graphOpened(final Graph graph) {
// Do nothing
}
@Override
public void graphClosed(final Graph graph) {
// Do nothing
}
@Override
public synchronized void newActiveGraph(final Graph graph) {
if (graph == importGraph && !opened) {
opened = true;
GraphManager.getDefault().removeGraphManagerListener(this);
PluginExecutor.startWith(ImportJDBCPlugin.class.getName(), false).set(ImportJDBCPlugin.DEFINITIONS_PARAMETER_ID, definitions).set(ImportJDBCPlugin.CONNECTION_PARAMETER_ID, connection).set(ImportJDBCPlugin.SCHEMA_PARAMETER_ID, schema).set(ImportJDBCPlugin.QUERY_PARAMETER_ID, query).set(ImportJDBCPlugin.USERNAME_PARAMETER_ID, username).set(ImportJDBCPlugin.PASSWORD_PARAMETER_ID, password).followedBy(ArrangementPluginRegistry.GRID_COMPOSITE).followedBy(InteractiveGraphPluginRegistry.RESET_VIEW).executeWriteLater(importGraph);
}
}
};
GraphManager.getDefault().addGraphManagerListener(graphListener);
GraphOpener.getDefault().openGraph(importGraph, "graph");
} else {
PluginExecutor.startWith(ImportJDBCPlugin.class.getName(), false).set(ImportJDBCPlugin.DEFINITIONS_PARAMETER_ID, definitions).set(ImportJDBCPlugin.CONNECTION_PARAMETER_ID, connection).set(ImportJDBCPlugin.QUERY_PARAMETER_ID, query).set(ImportJDBCPlugin.USERNAME_PARAMETER_ID, username).set(ImportJDBCPlugin.PASSWORD_PARAMETER_ID, password).set(ImportJDBCPlugin.SCHEMA_PARAMETER_ID, schema).followedBy(ArrangementPluginRegistry.GRID_COMPOSITE).followedBy(InteractiveGraphPluginRegistry.RESET_VIEW).executeWriteLater(importGraph);
}
}
use of au.gov.asd.tac.constellation.plugins.importexport.SchemaDestination in project constellation by constellation-app.
the class DelimitedImportController method processImport.
@Override
public void processImport() throws PluginException {
final List<ImportDefinition> definitions = configurationPane.createDefinitions(isFilesIncludeHeadersEnabled());
final Graph importGraph = currentDestination.getGraph();
final boolean schema = schemaInitialised;
final List<File> importFiles = new ArrayList<>(files);
final ImportFileParser parser = importFileParser;
if (currentDestination instanceof SchemaDestination) {
final GraphManagerListener graphManagerListener = new GraphManagerListener() {
private boolean opened = false;
@Override
public void graphOpened(Graph graph) {
// Do nothing
}
@Override
public void graphClosed(Graph graph) {
// Do nothing
}
@Override
public synchronized void newActiveGraph(final Graph graph) {
if (graph == importGraph && !opened) {
opened = true;
GraphManager.getDefault().removeGraphManagerListener(this);
PluginExecutor.startWith(ImportExportPluginRegistry.IMPORT_DELIMITED, false).set(ImportDelimitedPlugin.DEFINITIONS_PARAMETER_ID, definitions).set(ImportDelimitedPlugin.PARSER_PARAMETER_ID, parser).set(ImportDelimitedPlugin.FILES_PARAMETER_ID, importFiles).set(ImportDelimitedPlugin.SCHEMA_PARAMETER_ID, schema).set(ImportDelimitedPlugin.PARSER_PARAMETER_IDS_PARAMETER_ID, currentParameters).set(ImportDelimitedPlugin.FILES_INCLUDE_HEADERS_PARAMETER_ID, filesIncludeHeaders).followedBy(ArrangementPluginRegistry.GRID_COMPOSITE).followedBy(InteractiveGraphPluginRegistry.RESET_VIEW).executeWriteLater(importGraph);
}
}
};
GraphManager.getDefault().addGraphManagerListener(graphManagerListener);
GraphOpener.getDefault().openGraph(importGraph, "graph");
} else {
PluginExecutor.startWith(ImportExportPluginRegistry.IMPORT_DELIMITED, false).set(ImportDelimitedPlugin.DEFINITIONS_PARAMETER_ID, definitions).set(ImportDelimitedPlugin.PARSER_PARAMETER_ID, parser).set(ImportDelimitedPlugin.FILES_PARAMETER_ID, importFiles).set(ImportDelimitedPlugin.SCHEMA_PARAMETER_ID, schema).set(ImportDelimitedPlugin.FILES_INCLUDE_HEADERS_PARAMETER_ID, filesIncludeHeaders).followedBy(ArrangementPluginRegistry.GRID_COMPOSITE).followedBy(InteractiveGraphPluginRegistry.RESET_VIEW).executeWriteLater(importGraph);
}
}
use of au.gov.asd.tac.constellation.plugins.importexport.SchemaDestination in project constellation by constellation-app.
the class ImportDelimitedIO method saveParameters.
public static void saveParameters(final Window parentWindow, final DelimitedImportController importController) {
final Preferences prefs = NbPreferences.forModule(ApplicationPreferenceKeys.class);
final String userDir = ApplicationPreferenceKeys.getUserDir(prefs);
final File delimIoDir = new File(userDir, IMPORT_DELIMITED_DIR);
if (!delimIoDir.exists()) {
delimIoDir.mkdir();
}
if (!delimIoDir.isDirectory()) {
final String message = String.format("Can't create directory '%s'.", delimIoDir);
NotifyDisplayer.displayAlert(SAVE_TEMPLATE, "Templates Directory Error", message, Alert.AlertType.ERROR);
return;
}
final String templName = new TemplateListDialog(parentWindow, false).getName(delimIoDir);
if (templName != null) {
// A JSON document to store everything in.
// Two objects; the source data + the configuration data.
final ObjectMapper mapper = new ObjectMapper();
final ObjectNode rootNode = mapper.createObjectNode();
final ObjectNode source = rootNode.putObject(SOURCE);
source.put(PARSER, importController.getImportFileParser().getLabel());
source.put(SCHEMA_INIT, importController.isSchemaInitialised());
source.put(SHOW_ALL_SCHEMA_ATTRIBUTES, importController.isShowAllSchemaAttributesEnabled());
source.put(FILES_INCLUDE_HEADERS, importController.isFilesIncludeHeadersEnabled());
// We don't want to rely on a particular kind of graph being current when we load this definition.
// Therefore, we only save a schema factory as the destination.
final ImportDestination<?> importd = importController.getDestination();
final String destination;
if (importd instanceof SchemaDestination) {
destination = ((SchemaDestination) importd).getDestination().getName();
} else if (importd instanceof GraphDestination) {
destination = ((GraphDestination) importd).getGraph().getSchema().getFactory().getName();
} else {
throw new IllegalArgumentException(String.format("Unrecognised destination '%s'", importd));
}
source.put(DESTINATION, destination);
// One ImportDefinition per tab.
final ArrayNode definitionArray = rootNode.putArray(DEFINITIONS);
final List<ImportDefinition> definitions = importController.getDefinitions(importController.isFilesIncludeHeadersEnabled());
final String[] columns = importController.getCurrentColumns();
final Consumer<ImportDefinition> definitionConsumer = (ImportDefinition impdef) -> {
final ObjectNode def = definitionArray.addObject();
def.put(FIRST_ROW, impdef.getFirstRow());
if (impdef.getRowFilter() != null) {
final ObjectNode filter = def.putObject(FILTER);
final ArrayNode columnsArray = filter.putArray(COLUMNS);
for (final String column : impdef.getRowFilter().getColumns()) {
columnsArray.add(column);
}
final String script = impdef.getRowFilter().getScript();
if (script != null) {
filter.put(SCRIPT, script);
} else {
filter.putNull(SCRIPT);
}
}
final ObjectNode attrDefs = def.putObject(ATTRIBUTES);
for (final AttributeType attrType : AttributeType.values()) {
final ArrayNode typeArray = attrDefs.putArray(attrType.name());
final List<ImportAttributeDefinition> iadefs = impdef.getDefinitions(attrType);
final Consumer<ImportAttributeDefinition> attributeDefConsumer = (ImportAttributeDefinition iadef) -> {
if (hasSavableAttribute(iadef)) {
final ObjectNode type = typeArray.addObject();
// that the settings still get applied in the attribute list on load
if (iadef.getColumnIndex() == ImportConstants.ATTRIBUTE_NOT_ASSIGNED_TO_COLUMN) {
type.putNull(COLUMN_LABEL);
} else {
type.put(COLUMN_LABEL, columns[iadef.getColumnIndex() + 1]);
}
type.put(ATTRIBUTE_LABEL, iadef.getAttribute().getName());
if (iadef.getAttribute() instanceof NewAttribute) {
type.put(ATTRIBUTE_TYPE, iadef.getAttribute().getAttributeType());
type.put(ATTRIBUTE_DESCRIPTION, iadef.getAttribute().getDescription());
}
type.put(TRANSLATOR, iadef.getTranslator().getClass().getName());
type.put(TRANSLATOR_ARGS, iadef.getTranslator().getParameterValues(iadef.getParameters()));
if (iadef.getDefaultValue() != null) {
type.put(DEFAULT_VALUE, iadef.getDefaultValue());
} else {
type.putNull(DEFAULT_VALUE);
}
}
};
iadefs.stream().forEach(attributeDefConsumer);
}
};
definitions.stream().forEach(definitionConsumer);
mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
mapper.configure(SerializationFeature.CLOSE_CLOSEABLE, true);
final File f = new File(delimIoDir, FilenameEncoder.encode(templName + FileExtensionConstants.JSON));
try {
mapper.writeValue(f, rootNode);
StatusDisplayer.getDefault().setStatusText(String.format("Import definition saved to %s.", f.getPath()));
} catch (final IOException ex) {
NotifyDisplayer.display(String.format("Can't save import definition: %s", ex.getMessage()), NotifyDescriptor.ERROR_MESSAGE);
LOGGER.log(Level.WARNING, ex.getMessage(), ex);
}
}
}
Aggregations