Package org.fusesource.ide.launcher.ui.tabs

Source Code of org.fusesource.ide.launcher.ui.tabs.CamelContextFileTab

/*******************************************************************************
* Copyright (c) 2013 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
*     Red Hat, Inc. - initial API and implementation
******************************************************************************/

package org.fusesource.ide.launcher.ui.tabs;

import java.io.IOException;
import java.io.InputStream;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.core.runtime.content.IContentTypeManager;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.internal.ui.SWTFactory;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.m2e.actions.MavenLaunchConstants;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.FilteredResourcesSelectionDialog;
import org.fusesource.ide.launcher.debug.util.CamelDebugUtils;
import org.fusesource.ide.launcher.run.util.CamelContextLaunchConfigConstants;
import org.fusesource.ide.launcher.ui.Activator;

/**
* @author lhein
*/
public class CamelContextFileTab extends AbstractLaunchConfigurationTab {
 
  private FilteredResourcesSelectionDialog browseDialog;
  private Text camelContextFileText;
 
  /* (non-Javadoc)
   * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getImage()
   */
  @Override
  public Image getImage() {
    return Activator.getDefault().getImage("camel.png");
  }
 
  /* (non-Javadoc)
   * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite)
   */
  @Override
  public void createControl(Composite parent) {
    Composite c = SWTFactory.createComposite(parent, 1, 1, GridData.FILL_BOTH);
    setControl(c);
    Group group = SWTFactory.createGroup(c, "Select Camel Context file...", 2, 1, GridData.FILL_HORIZONTAL);
    this.camelContextFileText = SWTFactory.createSingleText(group, 1);
    this.camelContextFileText.addModifyListener(new ModifyListener() {
      /*
       * (non-Javadoc)
       * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
       */
      @Override
      public void modifyText(ModifyEvent e) {
        setDirty(true);
        updateLaunchConfigurationDialog();
      }
    });
   
    Button selectFileButton = SWTFactory.createPushButton(group, "Browse...", null);
    selectFileButton.addSelectionListener(new SelectionListener() {
      /*
       * (non-Javadoc)
       * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
       */
      @Override
      public void widgetSelected(SelectionEvent e) {
        IContainer container = ResourcesPlugin.getWorkspace().getRoot();
        browseDialog = new FilteredResourcesSelectionDialog(e.display.getActiveShell(), false, container, IResource.FILE) {
         
          /*
           * (non-Javadoc)
           * @see org.eclipse.ui.dialogs.FilteredResourcesSelectionDialog#fillContentProvider(org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.AbstractContentProvider, org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.ItemsFilter, org.eclipse.core.runtime.IProgressMonitor)
           */
          @Override
          protected void fillContentProvider(final AbstractContentProvider contentProvider, ItemsFilter itemsFilter, org.eclipse.core.runtime.IProgressMonitor progressMonitor) throws CoreException {
            AbstractContentProvider filteringContentProvider = new AbstractContentProvider() {
              /*
               * (non-Javadoc)
               * @see org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.AbstractContentProvider#add(java.lang.Object, org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.ItemsFilter)
               */
              @Override
              public synchronized void add(Object item, ItemsFilter filter) {
                if (filter.matchItem(item)) {
                  if (item instanceof IFile) {
                    IFile ifile = (IFile) item;
                    IContentTypeManager contentTypeManager = Platform.getContentTypeManager();
                    InputStream stream = null;
                    try {
                      stream = ifile.getContents(true);
                      IContentType t = contentTypeManager.findContentTypeFor(stream, ifile.getName());
                      if (t.getId().equals("org.fusesource.ide.camel.editor.camelContentType")) {
                        contentProvider.add(item, filter);
                      }
                    } catch (Exception ex) {
                      Activator.getLogger().error(ex);
                    } finally {
                      if (stream != null) {
                        try {
                          stream.close();
                        } catch (IOException ex) {
                          Activator.getLogger().error(ex);
                        }
                      }
                    }                   
                  }
                }
              }
            };
            super.fillContentProvider(filteringContentProvider, itemsFilter, progressMonitor);
          };
        };
        browseDialog.setInitialPattern("*.xml", FilteredResourcesSelectionDialog.FULL_SELECTION);
        browseDialog.setBlockOnOpen(true);
        browseDialog.open();
        if (browseDialog.getReturnCode() == FilteredResourcesSelectionDialog.OK) {
          // get the result of selection
          Object[] res = browseDialog.getResult();
          IFile f = (IFile)res[0];
          camelContextFileText.setText(f.getLocation().toOSString());
        }
        updateLaunchConfigurationDialog();
      }
     
      /*
       * (non-Javadoc)
       * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
       */
      @Override
      public void widgetDefaultSelected(SelectionEvent e) {
        widgetSelected(e);       
      }
    });
    Dialog.applyDialogFont(parent);
  }

  /* (non-Javadoc)
   * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
   */
  @Override
  public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
    configuration.setAttribute(CamelContextLaunchConfigConstants.ATTR_FILE, CamelContextLaunchConfigConstants.DEFAULT_CONTEXT_NAME);
    configuration.setAttribute(MavenLaunchConstants.ATTR_GOALS, "clean package org.apache.camel:camel-maven-plugin:run");
  }

  /* (non-Javadoc)
   * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration)
   */
  @Override
  public void initializeFrom(ILaunchConfiguration configuration) {
    String fileName = CamelDebugUtils.getRawCamelContextFilePathFromLaunchConfig(configuration);
    if (fileName == null) fileName = CamelContextLaunchConfigConstants.DEFAULT_CONTEXT_NAME;
    camelContextFileText.setText(fileName);
    updateLaunchConfigurationDialog();
  }

  /* (non-Javadoc)
   * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
   */
  @Override
  public void performApply(ILaunchConfigurationWorkingCopy configuration) {
    configuration.setAttribute(CamelContextLaunchConfigConstants.ATTR_FILE, camelContextFileText.getText().trim());
    setDirty(false);
  }

  /* (non-Javadoc)
   * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName()
   */
  @Override
  public String getName() {
    return "Camel";
  }
 
  /* (non-Javadoc)
   * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#isValid(org.eclipse.debug.core.ILaunchConfiguration)
   */
  @Override
  public boolean isValid(ILaunchConfiguration launchConfig) {
    IPath file = new Path(camelContextFileText.getText());
    if (file.toFile().exists() && file.toFile().isFile()) {
      setErrorMessage(null);
      return true;
    } else {
      setErrorMessage("Please select the Camel context file you want to start.");
      return false;
    }
  }
 
  /* (non-Javadoc)
   * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#canSave()
   */
  @Override
  public boolean canSave() {
    return isValid(null);
  }
}
TOP

Related Classes of org.fusesource.ide.launcher.ui.tabs.CamelContextFileTab

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.