blob: ff57322ece1265389f75bd363c9af49194f958b6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2015 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.internal.ui.properties;
import java.util.ArrayList;
import java.util.StringTokenizer;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.*;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.*;
import org.eclipse.pde.internal.core.ICoreConstants;
import org.eclipse.pde.internal.core.PDECore;
import org.eclipse.pde.internal.ui.*;
import org.eclipse.pde.internal.ui.elements.DefaultTableProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PropertyPage;
import org.osgi.service.prefs.BackingStoreException;
import org.osgi.service.prefs.Preferences;
public class SelfHostingPropertyPage extends PropertyPage {
private Image fImage;
private CheckboxTableViewer fViewer;
class ContentProvider extends DefaultTableProvider {
@Override
public Object[] getElements(Object input) {
return getOutputFolders();
}
}
class FolderLabelProvider extends LabelProvider {
@Override
public Image getImage(Object element) {
return fImage;
}
}
private String[] getOutputFolders() {
IProject project = (IProject) getElement().getAdapter(IProject.class);
ArrayList<String> list = new ArrayList<>();
try {
if (project.hasNature(JavaCore.NATURE_ID)) {
IJavaProject jProject = JavaCore.create(project);
list.add(jProject.getOutputLocation().toString());
IClasspathEntry[] entries = jProject.getRawClasspath();
for (int i = 0; i < entries.length; i++) {
IClasspathEntry entry = entries[i];
if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE && entry.getContentKind() == IPackageFragmentRoot.K_SOURCE) {
IPath path = entry.getOutputLocation();
if (path != null)
list.add(path.toString());
}
}
}
} catch (JavaModelException e) {
} catch (CoreException e) {
}
return list.toArray(new String[list.size()]);
}
public SelfHostingPropertyPage() {
fImage = PDEPluginImages.DESC_OUTPUT_FOLDER_OBJ.createImage();
}
@Override
public void dispose() {
if (fImage != null)
fImage.dispose();
}
/**
* @see PreferencePage#createContents(Composite)
*/
@Override
protected Control createContents(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
Label label = new Label(composite, SWT.WRAP);
label.setText(PDEUIMessages.SelfHostingPropertyPage_label);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.widthHint = 300;
label.setLayoutData(gd);
new Label(composite, SWT.NONE);
label = new Label(composite, SWT.WRAP);
label.setText(PDEUIMessages.SelfHostingPropertyPage_viewerLabel);
fViewer = CheckboxTableViewer.newCheckList(composite, SWT.BORDER);
fViewer.setContentProvider(new ContentProvider());
fViewer.setLabelProvider(new FolderLabelProvider());
fViewer.setInput(getElement());
fViewer.setComparator(new ViewerComparator());
fViewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
initialize();
Dialog.applyDialogFont(composite);
return composite;
}
@Override
public void createControl(Composite parent) {
super.createControl(parent);
PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.SELFHOSTING_PROPERTY_PAGE);
}
private void initialize() {
fViewer.setAllChecked(true);
Preferences pref = getPreferences((IProject) getElement().getAdapter(IProject.class));
if (pref != null) {
String binExcludes = pref.get(ICoreConstants.SELFHOSTING_BIN_EXCLUDES, ""); //$NON-NLS-1$
StringTokenizer tokenizer = new StringTokenizer(binExcludes, ","); //$NON-NLS-1$
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken().trim();
fViewer.setChecked(token, false);
}
}
}
private Preferences getPreferences(IProject project) {
return new ProjectScope(project).getNode(PDECore.PLUGIN_ID);
}
@Override
protected void performDefaults() {
fViewer.setAllChecked(true);
}
@Override
public boolean performOk() {
Preferences pref = getPreferences((IProject) getElement().getAdapter(IProject.class));
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < fViewer.getTable().getItemCount(); i++) {
Object object = fViewer.getElementAt(i);
if (!fViewer.getChecked(object)) {
if (buffer.length() > 0)
buffer.append(","); //$NON-NLS-1$
buffer.append(object.toString());
}
}
if (pref != null) {
if (buffer.length() > 0)
pref.put(ICoreConstants.SELFHOSTING_BIN_EXCLUDES, buffer.toString());
else
pref.remove(ICoreConstants.SELFHOSTING_BIN_EXCLUDES);
try {
pref.flush();
} catch (BackingStoreException e) {
PDEPlugin.logException(e);
}
}
return super.performOk();
}
}