
net.anwiba.commons.swing.filechooser.FileFieldConfigurationBuilder Maven / Gradle / Ivy
/*
* #%L
* anwiba commons swing
* %%
* Copyright (C) 2007 - 2016 Andreas Bartels
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 2.1 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Lesser Public License for more details.
*
* You should have received a copy of the GNU General Lesser Public
* License along with this program. If not, see
* .
* #L%
*/
package net.anwiba.commons.swing.filechooser;
import java.awt.Component;
import java.awt.Window;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import javax.swing.text.Document;
import net.anwiba.commons.lang.functional.IBlock;
import net.anwiba.commons.lang.functional.IConverter;
import net.anwiba.commons.model.IObjectModel;
import net.anwiba.commons.swing.action.ConfigurableActionBuilder;
import net.anwiba.commons.swing.action.IActionProcedure;
import net.anwiba.commons.swing.icon.GuiIcons;
import net.anwiba.commons.swing.object.AbstractObjectFieldConfigurationBuilder;
import net.anwiba.commons.swing.object.IActionFactory;
import net.anwiba.commons.swing.object.IToolTipFactory;
import net.anwiba.commons.utilities.string.StringUtilities;
import net.anwiba.commons.utilities.validation.IValidationResult;
import net.anwiba.commons.utilities.validation.IValidator;
public class FileFieldConfigurationBuilder
extends
AbstractObjectFieldConfigurationBuilder {
private final List fileFilters = new ArrayList<>();
public FileFieldConfigurationBuilder() {
super(new IValidator() {
@Override
public IValidationResult validate(final String value) {
if (!isValid(value)) {
return IValidationResult.inValid("Invalid file name");
}
return IValidationResult.valid();
}
}, new IConverter() {
@Override
public File convert(final String input) {
if (StringUtilities.isNullOrEmpty(input)) {
return null;
}
return new File(input);
}
}, new IConverter() {
@Override
public String convert(final File input) {
if (input == null) {
return ""; //$NON-NLS-1$
}
return input.toString();
}
});
setToolTipFactory(new IToolTipFactory() {
@Override
public String create(final IValidationResult validationResult, final String context) throws RuntimeException {
if (StringUtilities.isNullOrEmpty(context)) {
return null;
}
return context;
}
});
}
protected static boolean isValid(final String value) {
if (StringUtilities.isNullOrEmpty(value)) {
return true;
}
return (value.indexOf('\u0000') < 0);
}
public FileFieldConfigurationBuilder setFileValidator() {
setValidator(new IValidator() {
@Override
public IValidationResult validate(final String value) {
if (StringUtilities.isNullOrEmpty(value)) {
return IValidationResult.valid();
}
if (!isValid(value)) {
return IValidationResult.inValid("Invalid file name");
}
final File file = new File(value);
if (!file.isFile()) {
return IValidationResult.inValid("Invalid file name");
}
boolean flag = FileFieldConfigurationBuilder.this.fileFilters.isEmpty();
for (final FileFilter fileFilter : FileFieldConfigurationBuilder.this.fileFilters) {
flag |= fileFilter.accept(file);
}
if (!flag) {
return IValidationResult.inValid("Invalid folder name");
}
return IValidationResult.valid();
}
});
return this;
}
public FileFieldConfigurationBuilder setFolderValidator() {
setValidator(new IValidator() {
@Override
public IValidationResult validate(final String value) {
if (StringUtilities.isNullOrEmpty(value)) {
return IValidationResult.valid();
}
if (!isValid(value)) {
return IValidationResult.inValid("Invalid file name");
}
final File file = new File(value);
if (!file.isDirectory()) {
return IValidationResult.inValid("Invalid folder name");
}
boolean flag = FileFieldConfigurationBuilder.this.fileFilters.isEmpty();
for (final FileFilter fileFilter : FileFieldConfigurationBuilder.this.fileFilters) {
flag |= fileFilter.accept(file);
}
if (!flag) {
return IValidationResult.inValid("Invalid folder name");
}
return IValidationResult.valid();
}
});
return this;
}
public FileFieldConfigurationBuilder addFileSaveChooser(final Window owner) {
addActionFactory(new IActionFactory() {
@Override
public AbstractAction create(
final IObjectModel context,
final Document document,
final IBlock clearBlock) throws RuntimeException {
final ConfigurableActionBuilder builder = new ConfigurableActionBuilder();
final IActionProcedure procedure = new IActionProcedure() {
@Override
public void execute(final Component value) throws RuntimeException {
final ISaveFileChooserConfiguration configuration = new SaveFileChooserConfiguration(
context.get(),
FileFieldConfigurationBuilder.this.fileFilters,
JFileChooser.FILES_ONLY,
FileFieldConfigurationBuilder.this.fileFilters.size() == 0,
false);
final IFileChooserResult result = FileChoosers.show(owner, configuration);
if (result.getReturnState() != JFileChooser.APPROVE_OPTION) {
return;
}
context.set(result.getSelectedFile());
}
};
return builder.setIcon(GuiIcons.OPEN_ICON).setProcedure(procedure).build();
}
});
return this;
}
public FileFieldConfigurationBuilder addFolderSaveChooserAction(final Window owner) {
addActionFactory(new IActionFactory() {
@Override
public AbstractAction create(
final IObjectModel context,
final Document document,
final IBlock clearBlock) throws RuntimeException {
final ConfigurableActionBuilder builder = new ConfigurableActionBuilder();
final IActionProcedure procedure = new IActionProcedure() {
@Override
public void execute(final Component value) throws RuntimeException {
final ISaveFileChooserConfiguration configuration = new SaveFileChooserConfiguration(
context.get(),
Arrays.asList(),
JFileChooser.DIRECTORIES_ONLY,
false,
false);
final IFileChooserResult result = FileChoosers.show(owner, configuration);
if (result.getReturnState() != JFileChooser.APPROVE_OPTION) {
return;
}
context.set(result.getSelectedFile());
}
};
return builder.setIcon(GuiIcons.FOLDER_ICON).setProcedure(procedure).build();
}
});
return this;
}
public FileFieldConfigurationBuilder addFileFilter(final FileFilter fileFilter) {
this.fileFilters.add(fileFilter);
return this;
}
public FileFieldConfigurationBuilder addFileOpenChooserAction(final Window owner) {
addActionFactory(new IActionFactory() {
@Override
public AbstractAction create(
final IObjectModel context,
final Document document,
final IBlock clearBlock) throws RuntimeException {
final ConfigurableActionBuilder builder = new ConfigurableActionBuilder();
final IActionProcedure procedure = new IActionProcedure() {
@Override
public void execute(final Component value) throws RuntimeException {
final IOpenFileChooserConfiguration configuration = new OpenFileChooserConfiguration(
context.get(),
FileFieldConfigurationBuilder.this.fileFilters,
JFileChooser.FILES_ONLY,
false);
final IFileChooserResult result = FileChoosers.show(owner, configuration);
if (result.getReturnState() != JFileChooser.APPROVE_OPTION) {
return;
}
context.set(result.getSelectedFile());
}
};
return builder.setIcon(GuiIcons.OPEN_ICON).setProcedure(procedure).build();
}
});
return this;
}
public FileFieldConfigurationBuilder addFolderOpenChooserAction(final Window owner) {
addActionFactory(new IActionFactory() {
@Override
public AbstractAction create(
final IObjectModel context,
final Document document,
final IBlock clearBlock) throws RuntimeException {
final ConfigurableActionBuilder builder = new ConfigurableActionBuilder();
final IActionProcedure procedure = new IActionProcedure() {
@Override
public void execute(final Component value) throws RuntimeException {
final IOpenFileChooserConfiguration configuration = new OpenFileChooserConfiguration(
context.get(),
FileFieldConfigurationBuilder.this.fileFilters,
JFileChooser.DIRECTORIES_ONLY,
false);
final IFileChooserResult result = FileChoosers.show(owner, configuration);
if (result.getReturnState() != JFileChooser.APPROVE_OPTION) {
return;
}
context.set(result.getSelectedFile());
}
};
return builder.setIcon(GuiIcons.FOLDER_ICON).setProcedure(procedure).build();
}
});
return this;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy