blob: 240fc64b2ae49b6990fed17c0707cae50a039d6e [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.hdt.ui.preferences;
import org.apache.hdt.core.AbstractHadoopHomeReader;
import org.apache.hdt.core.HadoopVersion;
import org.apache.hdt.ui.Activator;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.preference.ComboFieldEditor;
import org.eclipse.jface.preference.DirectoryFieldEditor;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
/**
* This class represents a preference page that is contributed to the
* Preferences dialog. By sub-classing <tt>FieldEditorPreferencePage</tt>, we
* can use the field support built into JFace that allows us to create a page
* that is small and knows how to save, restore and apply itself.
*
* <p>
* This page is used to modify preferences only. They are stored in the
* preference store that belongs to the main plug-in class. That way,
* preferences can be accessed directly via the preference store.
*/
public class MapReducePreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
private StringFieldEditor hadoopHomeDirEditor;
private ComboFieldEditor hadoopVersionEditor;
private String hadoopVersionValue;
private String hadoopHomeValue;
public MapReducePreferencePage() {
super(GRID);
setPreferenceStore(Activator.getDefault().getPreferenceStore());
setTitle("Hadoop Map/Reduce Tools");
// setDescription("Hadoop Map/Reduce Preferences");
}
/**
* Creates the field editors. Field editors are abstractions of the common
* GUI blocks needed to manipulate various types of preferences. Each field
* editor knows how to save and restore itself.
*/
@Override
public void createFieldEditors() {
DirectoryFieldEditor editor = new DirectoryFieldEditor(PreferenceConstants.P_PATH, "&Hadoop installation directory:", getFieldEditorParent());
addField(editor);
HadoopVersion[] versions = HadoopVersion.values();
String[][] values = new String[versions.length][2];
int pos = 0;
for (HadoopVersion ver : versions) {
values[pos][0] = values[pos][1] = ver.getDisplayName();
pos++;
}
ComboFieldEditor options = new ComboFieldEditor(PreferenceConstants.P_VERSION, "&Hadoop Version:", values, getFieldEditorParent());
addField(options);
hadoopVersionEditor = options;
hadoopHomeDirEditor = editor;
hadoopVersionValue = HadoopVersion.Version1.getDisplayName();
}
public void propertyChange(PropertyChangeEvent event) {
super.propertyChange(event);
if (event.getSource().equals(hadoopVersionEditor)) {
hadoopVersionValue = event.getNewValue().toString();
}
if (event.getSource().equals(hadoopHomeDirEditor)) {
hadoopHomeValue = event.getNewValue().toString();
}
if (event.getProperty().equals(FieldEditor.VALUE)) {
checkState();
}
}
@Override
protected void checkState() {
super.checkState();
if(hadoopHomeValue==null || hadoopVersionValue==null){
setErrorMessage("Please set Hadoop Home/Version.");
setValid(false);
return;
}
AbstractHadoopHomeReader homeReader;
try {
homeReader = AbstractHadoopHomeReader.createReader(hadoopVersionValue);
if (!homeReader.validateHadoopHome(new Path(hadoopHomeValue).toFile())) {
setErrorMessage("Invalid Hadoop Home.");
setValid(false);
} else {
setErrorMessage(null);
setValid(true);
}
} catch (CoreException e) {
e.printStackTrace();
}
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
*/
@Override
public void init(IWorkbench workbench) {
// TODO Auto-generated method stub
}
}