package org.zend.php.zendserver.deployment.ui.editors;
import java.io.IOException;
import org.eclipse.core.resources.IContainer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.forms.IMessageManager;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.zend.php.zendserver.deployment.core.descriptor.IDeploymentDescriptor;
import org.zend.php.zendserver.deployment.core.descriptor.IDescriptorContainer;
import org.zend.php.zendserver.deployment.core.internal.descriptor.Feature;
import org.zend.php.zendserver.deployment.ui.Activator;
import org.zend.php.zendserver.deployment.ui.Messages;
import org.zend.sdklib.mapping.IMappingEntry.Type;
import org.zend.sdklib.mapping.IMappingModel;
public class FileField extends TextField {
private Button licenseBrowseButton;
private IContainer root;
private IDescriptorContainer fModel;
public FileField(IDeploymentDescriptor descriptor, Feature key, String label, IContainer root, IMessageManager mmng) {
super(descriptor, key, label, mmng);
this.root = root;
}
public FileField(IDescriptorContainer model, Feature key, String label, IContainer root, IMessageManager mmng) {
this(model.getDescriptorModel(), key, label, root, mmng);
this.fModel = model;
}
@Override
protected void createTextControl(Composite parent, FormToolkit toolkit) {
text = toolkit.createText(parent, ""); //$NON-NLS-1$
GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
text.setLayoutData(gd);
text.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
gd.horizontalSpan = labelTxt != null ? 1 : 2;
licenseBrowseButton = toolkit.createButton(parent, Messages.FileField_Browse, SWT.PUSH);
}
@Override
protected void createActions() {
super.createActions();
licenseBrowseButton.addSelectionListener(new SelectionAdapter() {
private static final String SEPARATOR = "/"; //$NON-NLS-1$
@Override
public void widgetSelected(SelectionEvent e) {
Shell shell = e.widget.getDisplay().getActiveShell();
String msg = Messages.bind(Messages.FileField_SelectFile, labelTxt);
OpenFileDialog dialog = new OpenFileDialog(shell, root, labelTxt, msg, text.getText());
String newSelection = openDialog(dialog);
if (newSelection != null) {
if (fModel != null) {
try {
IMappingModel mappingModel = fModel.getMappingModel();
String mappedPath = mappingModel.getPackagePath(IMappingModel.APPDIR,
newSelection);
if (mappedPath == null) {
mappingModel.addMapping(IMappingModel.APPDIR, Type.INCLUDE,
newSelection, false);
mappedPath = mappingModel.getPackagePath(IMappingModel.APPDIR,
newSelection);
mappingModel.store();
}
String appdir = fModel.getDescriptorModel().getApplicationDir();
text.setText(appdir + SEPARATOR + getUnifiedPath(mappedPath));
} catch (IOException e1) {
Activator.log(e1);
}
} else {
text.setText(newSelection);
}
}
}
private String getUnifiedPath(String path) {
String result = path.replaceAll("\\\\", SEPARATOR); //$NON-NLS-1$
return result.substring(result.indexOf(SEPARATOR) + 1);
}
});
}
protected String openDialog(OpenFileDialog dialog) {
return dialog.openFile();
}
@Override
public void setEnabled(boolean enable) {
super.setEnabled(enable);
licenseBrowseButton.setEnabled(enable);
}
}