ConfigurationTemplateBlock.java :  » IDE-Eclipse » Eclipse-plug-in-development » org » eclipse » pde » internal » ui » launcher » Java Open Source

Java Open Source » IDE Eclipse » Eclipse plug in development 
Eclipse plug in development » org » eclipse » pde » internal » ui » launcher » ConfigurationTemplateBlock.java
/*******************************************************************************
 * Copyright (c) 2005, 2006 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.launcher;

import java.io.File;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.variables.IStringVariableManager;
import org.eclipse.core.variables.VariablesPlugin;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.jface.window.Window;
import org.eclipse.pde.internal.ui.PDEPlugin;
import org.eclipse.pde.internal.ui.PDEUIMessages;
import org.eclipse.pde.internal.ui.util.FileNameFilter;
import org.eclipse.pde.ui.launcher.AbstractLauncherTab;
import org.eclipse.pde.ui.launcher.IPDELauncherConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
import org.eclipse.ui.dialogs.ISelectionStatusValidator;
import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;

public class ConfigurationTemplateBlock extends BaseBlock {

  private Button fGenerateFileButton;
  private Button fUseTemplateButton;

  public ConfigurationTemplateBlock(AbstractLauncherTab tab) {
    super(tab);
  }
  
  public void createControl(Composite parent) {
    Group group = new Group(parent, SWT.NONE);
    group.setText(PDEUIMessages.ConfigurationTab_configFileGroup); 
    group.setLayout(new GridLayout(2, false));
    group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    
    fGenerateFileButton = new Button(group, SWT.RADIO);
    fGenerateFileButton.setText(PDEUIMessages.ConfigurationTab_defaultConfigIni); 
    GridData gd = new GridData();
    gd.horizontalSpan = 2;
    fGenerateFileButton.setLayoutData(gd);
    fGenerateFileButton.addSelectionListener(new SelectionAdapter() {
      public void widgetSelected(SelectionEvent e) {
        enableBrowseSection(!fGenerateFileButton.getSelection());
      }
    });
    
    fUseTemplateButton = new Button(group, SWT.RADIO);
    fUseTemplateButton.setText(PDEUIMessages.ConfigurationTab_existingConfigIni); 
    gd = new GridData();
    gd.horizontalSpan = 2;
    fUseTemplateButton.setLayoutData(gd);
    
    createText(group, PDEUIMessages.ConfigurationTab_templateLoc, 20); 

    Composite buttons = new Composite(group, SWT.NONE);
    GridLayout layout = new GridLayout(4, false);
    layout.marginHeight = layout.marginWidth = 0;
    buttons.setLayout(layout);
    gd = new GridData(GridData.FILL_HORIZONTAL);
    gd.horizontalSpan = 2;
    buttons.setLayoutData(gd);

    Label label = new Label(buttons, SWT.NONE);
    label.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
    
    createButtons(buttons, new String[] {
        PDEUIMessages.BaseBlock_workspaceS, PDEUIMessages.BaseBlock_filesystemS, PDEUIMessages.BaseBlock_variablesS
    });
  }
  
  public void initializeFrom(ILaunchConfiguration configuration) throws CoreException {
    boolean generateDefault = configuration.getAttribute(IPDELauncherConstants.CONFIG_GENERATE_DEFAULT, true);
    fGenerateFileButton.setSelection(generateDefault);
    fUseTemplateButton.setSelection(!generateDefault);
    enableBrowseSection(!generateDefault);
    fLocationText.setText(configuration.getAttribute(IPDELauncherConstants.CONFIG_TEMPLATE_LOCATION, "")); //$NON-NLS-1$
  }
  
  public void performApply(ILaunchConfigurationWorkingCopy configuration) {
    configuration.setAttribute(IPDELauncherConstants.CONFIG_GENERATE_DEFAULT, fGenerateFileButton.getSelection());
    if (!fGenerateFileButton.getSelection())
      configuration.setAttribute(IPDELauncherConstants.CONFIG_TEMPLATE_LOCATION, fLocationText.getText().trim());
  }
  
  public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {    
    configuration.setAttribute(IPDELauncherConstants.CONFIG_GENERATE_DEFAULT, true);
    configuration.setAttribute(IPDELauncherConstants.CONFIG_TEMPLATE_LOCATION, 
        "${target_home}" + File.separatorChar + "configuration" + File.separatorChar + "config.ini"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
  }
  

  protected String getName() {
    return PDEUIMessages.ConfigurationTemplateBlock_name;
  }
    
  protected void handleBrowseWorkspace() {
    ElementTreeSelectionDialog dialog = 
            new ElementTreeSelectionDialog(
                fTab.getControl().getShell(), 
                new WorkbenchLabelProvider(),
                new WorkbenchContentProvider());
    
    IFile file = getFile();
    if (file != null)
      dialog.setInitialSelection(file);
    dialog.setInput(PDEPlugin.getWorkspace().getRoot());
    dialog.addFilter(new FileNameFilter("config.ini")); //$NON-NLS-1$
    dialog.setAllowMultiple(false);
    dialog.setTitle(PDEUIMessages.ConfigurationTab_fileSelection); 
    dialog.setMessage(PDEUIMessages.ConfigurationTab_fileDialogMessage); 
    dialog.setValidator(new ISelectionStatusValidator() {
      public IStatus validate(Object[] selection) {
        if (selection.length > 0 && selection[0] instanceof IFile)
          return new Status(IStatus.OK, PDEPlugin.getPluginId(),
              IStatus.OK, "", null); //$NON-NLS-1$
        
        return new Status(IStatus.ERROR, PDEPlugin.getPluginId(),
            IStatus.ERROR, "", null); //$NON-NLS-1$
      }
    });
    if (dialog.open() == Window.OK) {
      file = (IFile) dialog.getFirstResult();
      fLocationText.setText("${workspace_loc:" + file.getFullPath().makeRelative() + "}"); //$NON-NLS-1$ //$NON-NLS-2$
    }
  }
  
  protected IFile getFile() {
    String path = getLocation();
    if (path.length() > 0) {
        IResource res = null;
        IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
        if (path.startsWith("${workspace_loc:")) { //$NON-NLS-1$
            IStringVariableManager manager = VariablesPlugin.getDefault().getStringVariableManager();
          try {
                    path = manager.performStringSubstitution(path, false);
                    IFile[] containers = root.findFilesForLocation(new Path(path));
                    if (containers.length > 0)
                        res = containers[0];
                } catch (CoreException e) {
                }
      } else {      
        res = root.findMember(path);
      }
      if (res instanceof IFile) {
        return (IFile)res;
      }
    }
    return null;
  }


  protected void handleBrowseFileSystem() {
    FileDialog dialog = new FileDialog(fTab.getControl().getShell());
    dialog.setFilterExtensions(new String[] {"*.ini"}); //$NON-NLS-1$
    dialog.setFilterPath(getLocation());
    dialog.setText(PDEUIMessages.ConfigurationTab_configLocMessage); 
    String res = dialog.open();
    if (res != null)
      fLocationText.setText(res);
  }
  
  protected String getLocation() {
    String path = fLocationText.getText().trim();
    IStringVariableManager manager = VariablesPlugin.getDefault().getStringVariableManager();
      try {
           return manager.performStringSubstitution(path, false);
      } catch (CoreException e) {
        return path;
      }
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.