package com.dubture.symfony.ui.preferences;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.dltk.core.IScriptProject;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.DialogField;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.IStringButtonAdapter;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.LayoutUtil;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.StringButtonDialogField;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
import org.eclipse.ui.dialogs.PropertyPage;
import org.eclipse.ui.model.BaseWorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.osgi.service.prefs.BackingStoreException;
import com.dubture.symfony.core.SymfonyCorePlugin;
import com.dubture.symfony.core.log.Logger;
import com.dubture.symfony.core.preferences.CorePreferenceConstants.Keys;
import com.dubture.symfony.core.preferences.SymfonyCoreConstants;
import com.dubture.symfony.ui.SymfonyUiPlugin;
@SuppressWarnings("restriction")
public class SymfonyProjectPropertyPage extends PropertyPage implements IWorkbenchPropertyPage {
private StringButtonDialogField containerPath;
private IProject project;
private IEclipsePreferences node;
public SymfonyProjectPropertyPage() {
}
@Override
protected Control createContents(Composite parent) {
Composite container = new Composite(parent, SWT.NONE);
GridLayoutFactory.fillDefaults().equalWidth(false).numColumns(3).applyTo(container);
GridDataFactory.fillDefaults().grab(true, true).applyTo(container);
containerPath = new StringButtonDialogField(new IStringButtonAdapter() {
@Override
public void changeControlPressed(DialogField field) {
openDialog();
}
});
containerPath.setLabelText("Dumped container");
containerPath.setButtonLabel("Browse");
containerPath.doFillIntoGrid(container, 3);
containerPath.getTextControl(null).setEnabled(false);
LayoutUtil.setHorizontalGrabbing(containerPath.getTextControl(null));
IAdaptable element2 = getElement();
project = null;
if (element2 instanceof IScriptProject) {
project = ((IScriptProject)element2).getProject();
} else if (element2 instanceof IProject) {
project = (IProject) element2;
}
loadContainer();
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, SymfonyUiPlugin.PLUGIN_ID + "." + "symfony_property_page");
return container;
}
protected void loadContainer() {
node = new ProjectScope(project).getNode(SymfonyCorePlugin.ID);
String container = node.get(Keys.DUMPED_CONTAINER, SymfonyCoreConstants.DEFAULT_CONTAINER);
containerPath.setText(container);
}
protected void openDialog() {
try {
ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getShell(), new WorkbenchLabelProvider(), new BaseWorkbenchContentProvider());
dialog.setInput(project);
dialog.setAllowMultiple(false);
dialog.setTitle("Select the dumped service container to use");
if (dialog.open() == Window.OK) {
IResource resource = (IResource) dialog.getFirstResult();
containerPath.setText(resource.getFullPath().removeFirstSegments(1).toString());
}
} catch (Exception e) {
Logger.logException(e);
}
}
protected void saveSettings() {
try {
node.put(Keys.DUMPED_CONTAINER, containerPath.getText());
node.flush();
} catch (BackingStoreException e) {
Logger.logException(e);
}
}
@Override
public boolean performOk() {
saveSettings();
return super.performOk();
}
@Override
protected void performDefaults() {
containerPath.setText("app/cache/dev/appDevDebugProjectContainer.xml");
saveSettings();
super.performDefaults();
}
@Override
protected void performApply() {
saveSettings();
super.performApply();
}
}