content: /**
   *  Copyright (c) 2013-2016 Angelo ZERR.
   *  All rights reserved. This program and the accompanying materials
   *  are made available under the terms of the Eclipse Public License v1.0
   *  which accompanies this distribution, and is available at
   *  http://www.eclipse.org/legal/epl-v10.html
   *
   *  Contributors:
   *  Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation
   */
  package tern.eclipse.ide.ui.preferences;
  
  import java.io.File;
  
  import org.eclipse.jface.resource.JFaceResources;
  import org.eclipse.swt.widgets.Composite;
  import org.eclipse.swt.widgets.FileDialog;
  
  public class FileComboFieldEditor extends StringButtonComboFieldEditor {
  	private String[] extensions;
  	private File filterPath;
  	private boolean enforceAbsolute;
  
  	protected FileComboFieldEditor(String[] items) {
  		super(items);
  		this.extensions = null;
  
  		this.filterPath = null;
  
  		this.enforceAbsolute = false;
  	}
  
  	public FileComboFieldEditor(String name, String labelText, String[] items,
  			Composite parent) {
  		this(name, labelText, false, items, parent);
  	}
  
  	public FileComboFieldEditor(String name, String labelText,
  			boolean enforceAbsolute, String[] items, Composite parent) {
  		this(name, labelText, enforceAbsolute, 1, items, parent);
  	}
  
  	public FileComboFieldEditor(String name, String labelText,
  			boolean enforceAbsolute, int validationStrategy, String[] items,
  			Composite parent) {
  		super(items);
  
  		this.extensions = null;
  
  		this.filterPath = null;
  
  		this.enforceAbsolute = false;
  
  		init(name, labelText);
  		this.enforceAbsolute = enforceAbsolute;
  		setErrorMessage(JFaceResources
  				.getString("FileFieldEditor.errorMessage"));
  		setChangeButtonText(JFaceResources.getString("openBrowse"));
  		setValidateStrategy(validationStrategy);
  		createControl(parent);
  	}
  
  	protected String changePressed() {
  		File f = new File(getTextControl().getText());
  		if (!(f.exists())) {
  			f = null;
  		}
  		File d = getFile(f);
  		if (d == null) {
  			return null;
  		}
  
  		return d.getAbsolutePath();
  	}
  
  	protected boolean checkState() {
  		String msg = null;
  
  		String path = getTextControl().getText();
  		if (path != null)
  			path = path.trim();
  		else {
  			path = "";
  		}
  		if (path.length() == 0) {
  			if (!(isEmptyStringAllowed()))
  				msg = getErrorMessage();
  		} else {
  			if (!path.equals("node")) {
  				File file = new File(path);
  				if (file.isFile()) {
  					if ((this.enforceAbsolute) && (!(file.isAbsolute())))
  						msg = JFaceResources
  								.getString("FileFieldEditor.errorMessage2");
  				} else {
  					msg = getErrorMessage();
  				}
  			}
  		}
  
  		if (msg != null) {
  			showErrorMessage(msg);
  			return false;
  		}
  
  		if (doCheckState()) {
  			clearErrorMessage();
  			return true;
  		}
  		msg = getErrorMessage();
  		if (msg != null) {
  			showErrorMessage(msg);
  		}
  		return false;
  	}
  
  	private File getFile(File startingDirectory) {
  		FileDialog dialog = new FileDialog(getShell(), 268439552);
  		if (startingDirectory != null) {
  			dialog.setFileName(startingDirectory.getPath());
  		} else if (this.filterPath != null) {
  			dialog.setFilterPath(this.filterPath.getPath());
  		}
  		if (this.extensions != null) {
  			dialog.setFilterExtensions(this.extensions);
  		}
  		String file = dialog.open();
  		if (file != null) {
  			file = file.trim();
  			if (file.length() > 0) {
  				return new File(file);
  			}
  		}
  
  		return null;
  	}
  
  	public void setFileExtensions(String[] extensions) {
  		this.extensions = extensions;
  	}
  
  	public void setFilterPath(File path) {
  		this.filterPath = path;
  	}
  }