package com.dubture.composer.ui.preferences;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.dltk.core.DLTKCore;
import org.eclipse.dltk.core.IBuildpathEntry;
import org.eclipse.dltk.core.IScriptProject;
import org.eclipse.dltk.internal.core.BuildpathEntry;
import org.eclipse.dltk.internal.ui.wizards.buildpath.BPListElement;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.ui.preferences.WizardPropertyPage;
import org.osgi.service.prefs.BackingStoreException;
import com.dubture.composer.core.ComposerPlugin;
import com.dubture.composer.core.ComposerPreferenceConstants;
import com.dubture.composer.core.buildpath.BuildPathManager;
import com.dubture.composer.internal.core.resources.ComposerProject;
@SuppressWarnings("restriction")
public class BuildPathManagementPage extends WizardPropertyPage {
private IScriptProject scriptProject;
private BuildPathExclusionWizard wizard;
@Override
protected IWizard createWizard() {
BPListElement elem = new BPListElement(scriptProject, IBuildpathEntry.BPE_SOURCE, false);
ComposerProject composerProject = new ComposerProject(scriptProject.getProject());
IPath path = scriptProject.getPath().append(composerProject.getVendorDir());
elem.setPath(path);
IEclipsePreferences projectPreferences = ComposerPlugin.getDefault().getProjectPreferences(scriptProject.getProject());
String stored = projectPreferences.get(ComposerPreferenceConstants.BUILDPATH_INCLUDES_EXCLUDES, null);
if (stored != null) {
IBuildpathEntry buildpathEntry = scriptProject.decodeBuildpathEntry(stored);
for (IPath includePath : buildpathEntry.getInclusionPatterns()) {
elem.addToInclusion(path.append(includePath));
}
for (IPath excludePath : buildpathEntry.getExclusionPatterns()) {
elem.addToExclusions(path.append(excludePath));
}
}
return wizard = new BuildPathExclusionWizard(new BPListElement[]{}, elem);
}
@Override
public void setElement(IAdaptable element) {
super.setElement(element);
if (element instanceof IProject) {
scriptProject = DLTKCore.create((IProject)element);
return;
}
scriptProject = (IScriptProject) element;
}
@Override
@SuppressWarnings("unchecked")
protected void applyChanges() {
List<BPListElement> elements = wizard.getModifiedElements();
BPListElement element = (BPListElement) elements.get(0);
IBuildpathEntry buildpathEntry = element.getBuildpathEntry();
if (buildpathEntry instanceof BuildpathEntry) {
BuildpathEntry entry = (BuildpathEntry) buildpathEntry;
String encodeBuildpathEntry = scriptProject.encodeBuildpathEntry(entry);
IEclipsePreferences projectPreferences = ComposerPlugin.getDefault().getProjectPreferences(scriptProject.getProject());
projectPreferences.put(ComposerPreferenceConstants.BUILDPATH_INCLUDES_EXCLUDES, encodeBuildpathEntry);
// update buildpath
try {
// store preferences - is this needed here?
projectPreferences.flush();
// update buildpath
ComposerProject composerProject = new ComposerProject(scriptProject.getProject());
BuildPathManager bpm = new BuildPathManager(composerProject);
bpm.update();
} catch (CoreException e) {
e.printStackTrace();
} catch (BackingStoreException e) {
e.printStackTrace();
}
}
}
}