org.pentaho.amazon.emr.ui.AmazonElasticMapReduceJobExecutorDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.pentaho.amazon.emr.ui.AmazonElasticMapReduceJobExecutorDialog.java

Source

/*******************************************************************************
 *
 * Pentaho Big Data
 *
 * Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com
 *
 *******************************************************************************
 *
 * 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.pentaho.amazon.emr.ui;

import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileSystemOptions;
import org.apache.commons.vfs.auth.StaticUserAuthenticator;
import org.apache.commons.vfs.impl.DefaultFileSystemConfigBuilder;
import org.dom4j.DocumentException;
import org.eclipse.swt.widgets.Shell;
import org.pentaho.amazon.emr.job.AmazonElasticMapReduceJobExecutor;
import org.pentaho.di.core.exception.KettleFileException;
import org.pentaho.di.core.variables.VariableSpace;
import org.pentaho.di.core.vfs.KettleVFS;
import org.pentaho.di.i18n.BaseMessages;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.job.entry.JobEntryDialogInterface;
import org.pentaho.di.job.entry.JobEntryInterface;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.ui.core.database.dialog.tags.ExtTextbox;
import org.pentaho.di.ui.job.entry.JobEntryDialog;
import org.pentaho.ui.xul.XulDomContainer;
import org.pentaho.ui.xul.XulException;
import org.pentaho.ui.xul.XulRunner;
import org.pentaho.ui.xul.binding.Binding.Type;
import org.pentaho.ui.xul.binding.BindingConvertor;
import org.pentaho.ui.xul.binding.BindingFactory;
import org.pentaho.ui.xul.binding.DefaultBindingFactory;
import org.pentaho.ui.xul.components.XulMenuList;
import org.pentaho.ui.xul.components.XulTextbox;
import org.pentaho.ui.xul.containers.XulDialog;
import org.pentaho.ui.xul.swt.SwtXulLoader;
import org.pentaho.ui.xul.swt.SwtXulRunner;

import java.util.Enumeration;
import java.util.ResourceBundle;

public class AmazonElasticMapReduceJobExecutorDialog extends JobEntryDialog implements JobEntryDialogInterface {
    private static final Class<?> CLZ = AmazonElasticMapReduceJobExecutor.class;

    private AmazonElasticMapReduceJobExecutor jobEntry;

    private AmazonElasticMapReduceJobExecutorController controller = new AmazonElasticMapReduceJobExecutorController();

    private XulDomContainer container;

    private BindingFactory bf;

    private ResourceBundle bundle = new ResourceBundle() {
        @Override
        public Enumeration<String> getKeys() {
            return null;
        }

        @Override
        protected Object handleGetObject(String key) {
            return BaseMessages.getString(CLZ, key);
        }
    };

    public AmazonElasticMapReduceJobExecutorDialog(Shell parent, JobEntryInterface jobEntry, Repository rep,
            JobMeta jobMeta) throws XulException, DocumentException {
        super(parent, jobEntry, rep, jobMeta);

        /*
         * final BindingConvertor<String, Integer> bindingConverter = new BindingConvertor<String, Integer>() {
         * 
         * public Integer sourceToTarget(String value) { return Integer.parseInt(value); }
         * 
         * public String targetToSource(Integer value) { return value.toString(); }
         * 
         * };
         */

        this.jobEntry = (AmazonElasticMapReduceJobExecutor) jobEntry;

        SwtXulLoader swtXulLoader = new SwtXulLoader();
        swtXulLoader.registerClassLoader(getClass().getClassLoader());
        swtXulLoader.register("VARIABLETEXTBOX", "org.pentaho.di.ui.core.database.dialog.tags.ExtTextbox");
        swtXulLoader.setOuterContext(shell);

        container = swtXulLoader.loadXul("org/pentaho/amazon/emr/ui/AmazonElasticMapReduceJobExecutorDialog.xul", //$NON-NLS-1$
                bundle);

        final XulRunner runner = new SwtXulRunner();
        runner.addContainer(container);

        container.addEventHandler(controller);

        bf = new DefaultBindingFactory();
        bf.setDocument(container.getDocumentRoot());
        bf.setBindingType(Type.BI_DIRECTIONAL);

        bf.createBinding("jobentry-name", "value", controller, //$NON-NLS-1$//$NON-NLS-2$
                AmazonElasticMapReduceJobExecutorController.JOB_ENTRY_NAME); //$NON-NLS-3$
        bf.createBinding("jobentry-hadoopjob-name", "value", controller, //$NON-NLS-1$//$NON-NLS-2$
                AmazonElasticMapReduceJobExecutorController.HADOOP_JOB_NAME); //$NON-NLS-3$
        bf.createBinding("jobentry-hadoopjob-flow-id", "value", controller, //$NON-NLS-1$//$NON-NLS-2$
                AmazonElasticMapReduceJobExecutorController.HADOOP_JOB_FLOW_ID); //$NON-NLS-3$
        bf.createBinding("jar-url", "value", controller, AmazonElasticMapReduceJobExecutorController.JAR_URL); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
        bf.createBinding("access-key", "value", controller, AmazonElasticMapReduceJobExecutorController.ACCESS_KEY); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
        bf.createBinding("secret-key", "value", controller, AmazonElasticMapReduceJobExecutorController.SECRET_KEY); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

        BindingConvertor<String, FileObject> stagingDirBinding = new BindingConvertor<String, FileObject>() {

            @Override
            public FileObject sourceToTarget(String s) {
                // resolve the file
                try {
                    VariableSpace vs = controller.getVariableSpace();
                    FileSystemOptions opts = new FileSystemOptions();
                    DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(opts,
                            new StaticUserAuthenticator(null, controller.getAccessKey(),
                                    controller.getSecretKey()));
                    FileObject file = KettleVFS.getFileObject(s, vs, opts);
                    return file;
                } catch (FileSystemException e) {
                    return null;
                } catch (KettleFileException e) {
                    return null;
                }
            }

            @Override
            public String targetToSource(FileObject fileObject) {
                return fileObject.getName().getURI();
            }
        };

        bf.createBinding("s3-staging-directory", "value", controller, //$NON-NLS-1$//$NON-NLS-2$
                AmazonElasticMapReduceJobExecutorController.STAGING_DIR); //$NON-NLS-3$

        bf.setBindingType(Type.ONE_WAY);
        bf.createBinding("s3-staging-directory", "value", controller, //$NON-NLS-1$//$NON-NLS-2$
                AmazonElasticMapReduceJobExecutorController.STAGING_DIR_FILE, stagingDirBinding); //$NON-NLS-3$

        bf.setBindingType(Type.BI_DIRECTIONAL);
        //    bf.createBinding("num-instances", "value", controller, AmazonElasticMapReduceJobExecutorController.NUM_INSTANCES, bindingConverter); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
        bf.createBinding("num-instances", "value", controller, //$NON-NLS-1$//$NON-NLS-2$
                AmazonElasticMapReduceJobExecutorController.NUM_INSTANCES); //$NON-NLS-3$
        bf.createBinding("master-instance-type", "selectedItem", controller, //$NON-NLS-1$//$NON-NLS-2$
                AmazonElasticMapReduceJobExecutorController.MASTER_INSTANCE_TYPE); //$NON-NLS-3$
        bf.createBinding("slave-instance-type", "selectedItem", controller, //$NON-NLS-1$//$NON-NLS-2$
                AmazonElasticMapReduceJobExecutorController.SLAVE_INSTANCE_TYPE); //$NON-NLS-3$

        bf.createBinding("command-line-arguments", "value", controller, //$NON-NLS-1$//$NON-NLS-2$
                AmazonElasticMapReduceJobExecutorController.CMD_LINE_ARGS); //$NON-NLS-3$

        XulTextbox numInstances = (XulTextbox) container.getDocumentRoot().getElementById("num-instances");
        numInstances.setValue("" + controller.getNumInstances());

        XulMenuList<String> masterInstanceType = (XulMenuList<String>) container.getDocumentRoot()
                .getElementById("master-instance-type");
        masterInstanceType.setSelectedItem("" + controller.getMasterInstanceType());

        XulMenuList<String> slaveInstanceType = (XulMenuList<String>) container.getDocumentRoot()
                .getElementById("slave-instance-type");
        slaveInstanceType.setSelectedItem("" + controller.getSlaveInstanceType());

        bf.createBinding("blocking", "selected", controller, AmazonElasticMapReduceJobExecutorController.BLOCKING); //$NON-NLS-1$ //$NON-NLS-2$ 
        //    bf.createBinding("logging-interval", "value", controller, AmazonElasticMapReduceJobExecutorController.LOGGING_INTERVAL, bindingConverter); //$NON-NLS-1$ //$NON-NLS-2$
        bf.createBinding("logging-interval", "value", controller, //$NON-NLS-1$//$NON-NLS-2$
                AmazonElasticMapReduceJobExecutorController.LOGGING_INTERVAL);

        XulTextbox loggingInterval = (XulTextbox) container.getDocumentRoot().getElementById("logging-interval");
        loggingInterval.setValue("" + controller.getLoggingInterval());

        ExtTextbox tempBox = (ExtTextbox) container.getDocumentRoot().getElementById("access-key");
        tempBox.setVariableSpace(controller.getVariableSpace());
        tempBox = (ExtTextbox) container.getDocumentRoot().getElementById("secret-key");
        tempBox.setVariableSpace(controller.getVariableSpace());
        tempBox = (ExtTextbox) container.getDocumentRoot().getElementById("jobentry-hadoopjob-name");
        tempBox.setVariableSpace(controller.getVariableSpace());
        tempBox = (ExtTextbox) container.getDocumentRoot().getElementById("jobentry-hadoopjob-flow-id");
        tempBox.setVariableSpace(controller.getVariableSpace());
        tempBox = (ExtTextbox) container.getDocumentRoot().getElementById("s3-staging-directory");
        tempBox.setVariableSpace(controller.getVariableSpace());
        tempBox = (ExtTextbox) container.getDocumentRoot().getElementById("jar-url");
        tempBox.setVariableSpace(controller.getVariableSpace());
        tempBox = (ExtTextbox) container.getDocumentRoot().getElementById("command-line-arguments");
        tempBox.setVariableSpace(controller.getVariableSpace());
        tempBox = (ExtTextbox) container.getDocumentRoot().getElementById("num-instances");
        tempBox.setVariableSpace(controller.getVariableSpace());
        tempBox = (ExtTextbox) container.getDocumentRoot().getElementById("logging-interval");
        tempBox.setVariableSpace(controller.getVariableSpace());

        bf.setBindingType(Type.BI_DIRECTIONAL);

        controller.setJobEntry((AmazonElasticMapReduceJobExecutor) jobEntry);
        controller.init();
    }

    public JobEntryInterface open() {
        XulDialog dialog = (XulDialog) container.getDocumentRoot().getElementById("amazon-emr-job-entry-dialog"); //$NON-NLS-1$
        dialog.show();
        return jobEntry;
    }

}