//This product is provided under the terms of EPL (Eclipse Public License)
//version 1.0.
//
//The full license text can be read from: http://www.eclipse.org/org/documents/epl-v10.php
package org.dtangler.swingui.fileinput.impl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.dtangler.core.dependencyengine.DependencyEngineFactory;
import org.dtangler.swingui.directoryselector.DirectorySelector;
import org.dtangler.swingui.fileinput.FileInputSelection;
import org.dtangler.swingui.textinput.TextInputSelector;
public class DefaultFileInputSelectorModel implements FileInputSelectorModel {
private final DirectorySelector directorySelector;
private final TextInputSelector textInputSelector;
private final DependencyEngineFactory dependencyEngineFactory;
private String engine;
private final List<String> paths;
private final List<String> masks;
private FileInputSelection appliedInput;
public DefaultFileInputSelectorModel(DirectorySelector directorySelector,
TextInputSelector textInputSelector,
DependencyEngineFactory dependencyEngineFactory,
FileInputSelection defaultInput) {
this.directorySelector = directorySelector;
this.textInputSelector = textInputSelector;
this.dependencyEngineFactory = dependencyEngineFactory;
engine = defaultInput.getEngine();
paths = new ArrayList(defaultInput.getPaths());
masks = new ArrayList(defaultInput.getIgnoredFileMasks());
}
public String getEngine() {
if (engine == null)
return null;
return new String(engine);
}
public List<String> getEngines() {
if (dependencyEngineFactory == null)
return null;
return dependencyEngineFactory.getDependencyEngineIds();
}
private List<String> getFileNameExtensionsSupportedByDependencyEngine() {
if (engine != null)
return dependencyEngineFactory.getDependencyEngine(engine)
.getInputFileNameExtensions();
return new ArrayList<String>();
}
private String getInputFilesDescriptionSupportedByDependencyEngine() {
if (engine != null)
return dependencyEngineFactory.getDependencyEngine(engine)
.getInputFilesDescription();
return "";
}
private boolean isDirectoryInputSupportedByDependencyEngine() {
if (engine != null)
return dependencyEngineFactory.getDependencyEngine(engine)
.isDirectoryInputSupported();
return false;
}
private String getFileNameExtensionsDescription() {
if (engine != null) {
String txt = "";
List<String> list = getFileNameExtensionsSupportedByDependencyEngine();
for (String extension : list) {
if (txt.length() > 0)
txt += "; ";
txt += ("*." + extension);
}
String description = getInputFilesDescriptionSupportedByDependencyEngine();
if (description != null) {
txt = getInputFilesDescriptionSupportedByDependencyEngine()
+ " (" + txt + ")";
}
return txt;
}
return "";
}
private String getDirectorySelectorDialogTitle() {
if (isDirectoryInputSupportedByDependencyEngine()) {
return "Select input directory or file";
}
return "Select input file";
}
public List<String> getPaths() {
return Collections.unmodifiableList(paths);
}
public List<String> getMasks() {
return Collections.unmodifiableList(masks);
}
public void setEngine(String engine) {
this.engine = engine;
}
public void removePaths(List<String> pathsToRemove) {
paths.removeAll(pathsToRemove);
}
public void removeMasks(List<String> masksToRemove) {
masks.removeAll(masksToRemove);
}
public boolean isValidInputSelection() {
return !paths.isEmpty();
}
public void addMask() {
String mask = textInputSelector.selectValue("File mask to ignore",
"Input Filter");
if (mask != null && !masks.contains(mask))
masks.add(mask);
}
public void addPath() {
String newPath = directorySelector.selectDirectory(
getDirectorySelectorDialogTitle(),
getFileNameExtensionsDescription(),
isDirectoryInputSupportedByDependencyEngine(),
getFileNameExtensionsSupportedByDependencyEngine());
if (newPath != null && !paths.contains(newPath))
paths.add(newPath);
}
public FileInputSelection getAppliedInputSelection() {
return appliedInput;
}
public void applySelection() {
appliedInput = new FileInputSelection(engine, paths, masks);
}
}