public AnalysisJobMetadata createMetadata() {
final MutableAnalysisJobMetadata mutableAnalysisJobMetadata = getAnalysisJobMetadata();
final Datastore datastore = getDatastore();
final String datastoreName = (datastore == null ? null : datastore.getName());
final List<MetaModelInputColumn> sourceColumns = getSourceColumns();
final List<String> sourceColumnPaths = new ArrayList<>(sourceColumns.size());
final List<ColumnType> sourceColumnTypes = new ArrayList<>(sourceColumns.size());
for (final MetaModelInputColumn sourceColumn : sourceColumns) {
final Column column = sourceColumn.getPhysicalColumn();
final String path = column.getQualifiedLabel();
final ColumnType type = column.getType();
sourceColumnPaths.add(path);
sourceColumnTypes.add(type);
}
final Map<String, String> properties = mutableAnalysisJobMetadata.getProperties();
final Map<String, String> variables = mutableAnalysisJobMetadata.getVariables();
final String jobName = mutableAnalysisJobMetadata.getJobName();
final String jobVersion = mutableAnalysisJobMetadata.getJobVersion();
final String jobDescription = mutableAnalysisJobMetadata.getJobDescription();
final String author = mutableAnalysisJobMetadata.getAuthor();
final Date createdDate = mutableAnalysisJobMetadata.getCreatedDate();
final Date updatedDate = mutableAnalysisJobMetadata.getUpdatedDate();
return new ImmutableAnalysisJobMetadata(jobName, jobVersion, jobDescription, author, createdDate, updatedDate,
datastoreName, sourceColumnPaths, sourceColumnTypes, variables, properties);
}