/* * Copyright 2014 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.dashbuilder.client.widgets.dataset.editor.csv; import com.google.gwt.editor.client.EditorDelegate; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Widget; import org.dashbuilder.client.widgets.resources.i18n.DataSetEditorConstants; import org.dashbuilder.common.client.editor.ValueBoxEditor; import org.dashbuilder.common.client.editor.file.FileUploadEditor; import org.dashbuilder.dataset.client.DataSetClientServices; import org.dashbuilder.dataset.def.CSVDataSetDef; import org.gwtbootstrap3.client.ui.constants.Placement; import org.uberfire.client.mvp.UberView; import javax.annotation.PostConstruct; import javax.enterprise.context.Dependent; import javax.inject.Inject; /** * <p>CSV Data Set specific attributes editor presenter.</p> * * @since 0.4.0 */ @Dependent public class CSVDataSetDefAttributesEditor implements IsWidget, org.dashbuilder.dataset.client.editor.CSVDataSetDefAttributesEditor { public interface View extends UberView<CSVDataSetDefAttributesEditor> { /** * <p>Specify the views to use for each sub-editor before calling <code>initWidget</code>.</p> */ void initWidgets(ValueBoxEditor.View fileURLView, IsWidget filePathView, ValueBoxEditor.View sepCharView, ValueBoxEditor.View quoteCharView, ValueBoxEditor.View escCharView, ValueBoxEditor.View datePatternView, ValueBoxEditor.View numberPatternView); void showFilePathInput(); void showFileURLInput(); } DataSetClientServices dataSetClientServices; ValueBoxEditor<String> fileURL; FileUploadEditor filePath; ValueBoxEditor<Character> separatorChar; ValueBoxEditor<Character> quoteChar; ValueBoxEditor<Character> escapeChar; ValueBoxEditor<String> datePattern; ValueBoxEditor<String> numberPattern; public View view; CSVDataSetDef value; boolean isUsingFilePath = true; @Inject public CSVDataSetDefAttributesEditor(final DataSetClientServices dataSetClientServices, final ValueBoxEditor<String> fileURL, final FileUploadEditor filePath, final ValueBoxEditor<Character> separatorChar, final ValueBoxEditor<Character> quoteChar, final ValueBoxEditor<Character> escapeChar, final ValueBoxEditor<String> datePattern, final ValueBoxEditor<String> numberPattern, final View view) { this.dataSetClientServices = dataSetClientServices; this.fileURL = fileURL; this.filePath = filePath; this.separatorChar = separatorChar; this.quoteChar = quoteChar; this.escapeChar = escapeChar; this.datePattern = datePattern; this.numberPattern = numberPattern; this.view = view; } @PostConstruct public void init() { // Initialize the Bean specific attributes editor view. view.init(this); view.initWidgets(fileURL.view, filePath.view, separatorChar.view, quoteChar.view, escapeChar.view, datePattern.view, numberPattern.view); fileURL.addHelpContent(DataSetEditorConstants.INSTANCE.csv_URL(), DataSetEditorConstants.INSTANCE.csv_URL_description(), Placement.BOTTOM); filePath.addHelpContent(DataSetEditorConstants.INSTANCE.csv_filePath(), DataSetEditorConstants.INSTANCE.csv_filePath_description(), Placement.BOTTOM); separatorChar.addHelpContent(DataSetEditorConstants.INSTANCE.csv_sepChar(), DataSetEditorConstants.INSTANCE.csv_sepChar_description(), Placement.BOTTOM); quoteChar.addHelpContent(DataSetEditorConstants.INSTANCE.csv_quoteChar(), DataSetEditorConstants.INSTANCE.csv_quoteChar_description(), Placement.BOTTOM); escapeChar.addHelpContent(DataSetEditorConstants.INSTANCE.csv_escapeChar(), DataSetEditorConstants.INSTANCE.csv_escapeChar_description(), Placement.BOTTOM); datePattern.addHelpContent(DataSetEditorConstants.INSTANCE.csv_datePattern(), DataSetEditorConstants.INSTANCE.csv_datePattern_description(), Placement.BOTTOM); numberPattern.addHelpContent(DataSetEditorConstants.INSTANCE.csv_numberPattern(), DataSetEditorConstants.INSTANCE.csv_numberPattern_description(), Placement.BOTTOM); // Configure file upload component. filePath.configure("csvFileUpload", new FileUploadEditor.FileUploadEditorCallback() { @Override public String getUploadFileName() { return value.getUUID() + ".csv"; } @Override public String getUploadFileUrl() { String csvPath = "default://master@datasets/tmp/" + value.getUUID() + ".csv"; return dataSetClientServices.getUploadFileUrl(csvPath); } }); // By default, show the file path input. view.showFilePathInput(); } @Override public Widget asWidget() { return view.asWidget(); } /************************************************************* ** GWT EDITOR CONTRACT METHODS ** *************************************************************/ @Override public ValueBoxEditor<String> fileURL() { return fileURL; } @Override public FileUploadEditor filePath() { return filePath; } @Override public ValueBoxEditor<Character> separatorChar() { return separatorChar; } @Override public ValueBoxEditor<Character> quoteChar() { return quoteChar; } @Override public ValueBoxEditor<Character> escapeChar() { return escapeChar; } @Override public ValueBoxEditor<String> datePattern() { return datePattern; } @Override public ValueBoxEditor<String> numberPattern() { return numberPattern; } @Override public boolean isUsingFilePath() { return isUsingFilePath; } @Override public void flush() { } @Override public void onPropertyChange(final String... paths) { } @Override public void setValue(final CSVDataSetDef value) { this.value = value; if (value != null && value.getFileURL() != null) { useFileURL(); } else { useFilePath(); } } @Override public void setDelegate(final EditorDelegate<CSVDataSetDef> delegate) { } /************************************************************* ** VIEW CALLBACK METHODS ** *************************************************************/ void onUseFilePathButtonClick() { useFilePath(); } void onUseFileURLButtonClick() { useFileURL(); } /************************************************************* ** PRIVATE PRESENTER METHODS ** *************************************************************/ void useFilePath() { this.isUsingFilePath = true; view.showFilePathInput(); } void useFileURL() { this.isUsingFilePath = false; view.showFileURLInput(); } }