/**
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.eclipse.preferences;
import java.io.ByteArrayInputStream;
import org.drools.eclipse.DroolsEclipsePlugin;
import org.drools.eclipse.util.DroolsRuntime;
import org.drools.eclipse.util.DroolsRuntimeManager;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.jdt.internal.ui.preferences.PropertyAndPreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
public class DroolsProjectPreferencePage extends PropertyAndPreferencePage {
public static final String PREF_ID= "org.drools.eclipse.preferences.DroolsRuntimesPreferencePage";
public static final String PROP_ID= "org.drools.eclipse.preferences.DroolsProjectPreferencePage";
private Combo droolsRuntimeCombo;
public DroolsProjectPreferencePage() {
setTitle("Drools Project Preferences");
}
protected Control createPreferenceContent(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 2;
composite.setLayout(gridLayout);
Label nameLabel = new Label(composite, SWT.NONE);
nameLabel.setText("Drools Runtime: ");
droolsRuntimeCombo = new Combo(composite, SWT.LEFT);
DroolsRuntime[] runtimes = DroolsRuntimeManager.getDroolsRuntimes();
int selection = -1;
String currentRuntime = DroolsRuntimeManager.getDroolsRuntime(getProject());
for (int i = 0; i < runtimes.length; i++) {
droolsRuntimeCombo.add(runtimes[i].getName());
if (runtimes[i].getName().equals(currentRuntime)) {
selection = i;
}
}
if (selection != -1) {
droolsRuntimeCombo.select(selection);
} else if (runtimes.length > 0) {
droolsRuntimeCombo.select(0);
}
GridData gridData = new GridData();
gridData.grabExcessHorizontalSpace = true;
gridData.horizontalAlignment = GridData.FILL;
droolsRuntimeCombo.setLayoutData(gridData);
return composite;
}
protected String getPreferencePageID() {
return PREF_ID;
}
protected String getPropertyPageID() {
return PROP_ID;
}
protected boolean hasProjectSpecificOptions(IProject project) {
return project.getFile(".settings/.drools.runtime").exists();
}
public boolean performOk() {
try {
IFile file = getProject().getFile(".settings/.drools.runtime");
if (useProjectSettings()) {
String runtime = "<runtime>"
+ droolsRuntimeCombo.getItem(droolsRuntimeCombo.getSelectionIndex())
+ "</runtime>";
if (!file.exists()) {
IFolder folder = getProject().getFolder(".settings");
if (!folder.exists()) {
folder.create(true, true, null);
}
file.create(new ByteArrayInputStream(runtime.getBytes()), true, null);
} else {
file.setContents(new ByteArrayInputStream(runtime.getBytes()), true, false, null);
}
} else {
if (file.exists()) {
file.delete(true, null);
}
}
getProject().close(null);
getProject().open(null);
} catch (Throwable t) {
DroolsEclipsePlugin.log(t);
return false;
}
return super.performOk();
}
}