如何将字符串值从事件处理程序返回到同一个包java中的另一个文件

时间:2014-02-12 05:23:20

标签: java eclipse-plugin swt jface

在我的程序中,当我选择一个radion按钮时,我需要在下一个文件的InputStream openContentStream()函数中获取相应的值和文件名

SampleNewWizard.java

package amma.wizards;

import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.core.runtime.*;
import org.eclipse.jface.operation.*;

import java.lang.reflect.InvocationTargetException;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;

import java.io.*;

import org.eclipse.ui.*;
import org.eclipse.ui.ide.IDE;

  /**
 * This is a sample new wizard. Its role is to create a new file 
 * resource in the provided container. If the container resource
 * (a folder or a project) is selected in the workspace 
 * when the wizard is opened, it will accept it as the target
 * container. The wizard creates one file with the extension
 * "mpe". If a sample multi-page editor (also available
 * as a template) is registered for the same extension, it will
 * be able to open it.
 */

 public class SampleNewWizard extends Wizard implements INewWizard {
private SampleNewWizardPage page;
private ISelection selection;

    /**
 * Constructor for SampleNewWizard.
 */
public SampleNewWizard() {
    super();
    setNeedsProgressMonitor(true);
}

/**
 * Adding the page to the wizard.
 */

public void addPages() {
    page = new SampleNewWizardPage(selection);
    addPage(page);
}

/**
 * This method is called when 'Finish' button is pressed in
 * the wizard. We will create an operation and run it
 * using wizard as execution context.
 */
public boolean performFinish() {
    final String containerName = page.getContainerName();
    final String fileName = page.getFileName();
    // setFileExtension("xml");
    IRunnableWithProgress op = new IRunnableWithProgress() {
        public void run(IProgressMonitor monitor) throws InvocationTargetException {
            try {
                doFinish(containerName, fileName, monitor);
            } catch (CoreException e) {
                throw new InvocationTargetException(e);
            } finally {
                monitor.done();
            }
        }
    };
    try {
        getContainer().run(true, false, op);
    } catch (InterruptedException e) {
        return false;
    } catch (InvocationTargetException e) {
        Throwable realException = e.getTargetException();
        MessageDialog.openError(getShell(), "Error", realException.getMessage());
        return false;
    }
    return true;
}

/**
 * The worker method. It will find the container, create the
 * file if missing or just replace its contents, and open
 * the editor on the newly created file.
 */

private void doFinish(
    String containerName,
    String fileName,
    IProgressMonitor monitor)
    throws CoreException {
    // create a sample file
    monitor.beginTask("Creating " + fileName, 2);
    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
    IResource resource = root.findMember(new Path(containerName));
    if (!resource.exists() || !(resource instanceof IContainer)) {
        throwCoreException("Container \"" + containerName + "\" does not exist.");
    }
    IContainer container = (IContainer) resource;
    final IFile file = container.getFile(new Path(fileName));
    try {
        InputStream stream = openContentStream();
        if (file.exists()) {
            file.setContents(stream, true, true, monitor);
        } else {
            file.create(stream, needsPreviousAndNextButtons(), monitor);
        }
        stream.close();
    } catch (IOException e) {
    }
    monitor.worked(1);
    monitor.setTaskName("Opening file for editing...");
    getShell().getDisplay().asyncExec(new Runnable() {
        public void run() {
            IWorkbenchPage page =
                PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
            try {
                IDE.openEditor(page, file, true);
            } catch (PartInitException e) {
            }
        }
    });
    monitor.worked(1);
}

/**
 * We will initialize file contents with a sample text.
 * @param contents 
 */

public static InputStream openContentStream() {
    String contents =
        "This is the initial file contents for *.ej file that should be word-sorted in the Preview page of the multi-page editor";
    return new ByteArrayInputStream(contents.getBytes());
}

private void throwCoreException(String message) throws CoreException {
    IStatus status =
        new Status(IStatus.ERROR, "amma", IStatus.OK, message, null);
    throw new CoreException(status);
}

/**
 * We will accept the selection in the workbench to see if
 * we can initialize from it.
 * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection)
 */
public void init(IWorkbench workbench, IStructuredSelection selection) {
    this.selection = selection;
}
}

SampleNewWizardPage.java

package amma.wizards;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogFieldGroup;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
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.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.ContainerSelectionDialog;

/**
 * The "New" wizard page allows setting the container for the new file as well
 * as the file name. The page will only accept file name without the extension
 * OR with the extension that matches the expected one (ej).
*/

@SuppressWarnings("restriction")
public class SampleNewWizardPage extends WizardPage {
private Text containerText;

private Text fileText;

private ISelection selection;
private SelectionButtonDialogFieldGroup fMethodStubsButtons;
IType type;

/**
 * Constructor for SampleNewWizardPage.
 * 
 * @param pageName
 */
public SampleNewWizardPage(ISelection selection) {
    super("wizardPage");
    setTitle("Multi-page Editor File");
    setDescription("This wizard creates a new file with *.ej extension that can be opened by a multi-page editor.");
    this.selection = selection;
    String[] buttonNames3= new String[] {"type","channel","inherited"   };
    fMethodStubsButtons= new SelectionButtonDialogFieldGroup(SWT.CHECK,  buttonNames3, 1);
       fMethodStubsButtons.setLabelText(NewWizardMessages.NewClassWizardPage_methods_label);
}

/**
 * @see IDialogPage#createControl(Composite)
 */
public void createControl(Composite parent) {
    Composite container = new Composite(parent, SWT.NULL);
    GridLayout layout = new GridLayout();
    container.setLayout(layout);
    layout.numColumns = 3;
    layout.verticalSpacing = 9;
    Label label = new Label(container, SWT.NULL);
    label.setText("&Container:");

    containerText = new Text(container, SWT.BORDER | SWT.SINGLE);
    GridData gd = new GridData(GridData.FILL_HORIZONTAL);
    containerText.setLayoutData(gd);
    containerText.addModifyListener(new ModifyListener() {
        public void modifyText(ModifyEvent e) {
            dialogChanged();
        }
    });


    Button button = new Button(container, SWT.PUSH);
    button.setText("Browse...");
    button.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            handleBrowse();
        }
    });
    label = new Label(container, SWT.NULL);
    label.setText("&File name:"); 
    fileText = new Text(container, SWT.BORDER | SWT.SINGLE);

    gd = new GridData(GridData.FILL_HORIZONTAL);


    fileText.setLayoutData(gd);
    fileText.addModifyListener(new ModifyListener() {
        public void modifyText(ModifyEvent e) {
            dialogChanged();
        }
    });
    Label separator = new Label (container, SWT.SEPARATOR | SWT.HORIZONTAL);
    label = new Label(container, SWT.NULL);
    label.setText("&Select:"); 
     final Button mrButton = new Button(container, SWT.RADIO);
     mrButton.setText("Channel");
     final Button mrsButton = new Button(container, SWT.RADIO);
     mrsButton.setText("Type");
     mrButton.addListener (SWT.Selection, new Listener () {
            public void handleEvent (Event event) {
                StringBuffer buf= new StringBuffer();
                final String lineDelim= "\n";
                if(mrButton.getSelection() == true)
                {
                    System.out.println("channel");
                    String contents = "hai";
                    //SampleNewWizard.openContentStream(contents);
                    buf.append("channel "+getFileName());
                    buf.append("()");
                    buf.append(lineDelim);
                    buf.append("{");
                    buf.append(lineDelim);
                    buf.append("}");
                    buf.toString();
                //  try {
                          //type.createMethod(buf.toString(), null, false, null);
                    //} catch (JavaModelException e) {
                        // TODO Auto-generated catch  block
                        //e.printStackTrace();
                    //}
                    }
               IDialogSettings dialogSettings= getDialogSettings();
                if (dialogSettings != null) {
                    IDialogSettings section= dialogSettings.getSection(getFileName());
                    if (section == null) {
                    section= dialogSettings.addNewSection(getFileName());
            }
              }
            }
     });

     mrsButton.addListener (SWT.Selection, new Listener () {
            public void handleEvent (Event event) {

                if(mrsButton.getSelection() == true)
                {
                    System.out.println("type");
                }
            }
        });

    initialize();
    dialogChanged();
    setControl(container);
}


/*  private void createMethodStubSelectionControls(Composite container,int nColumns) {
    Control labelControl= fMethodStubsButtons.getLabelControl(container);
    LayoutUtil.setHorizontalSpan(labelControl, nColumns);

    DialogField.createEmptySpace(container);

    Control buttonGroup= fMethodStubsButtons.getSelectionButtonsGroup(container);
    LayoutUtil.setHorizontalSpan(buttonGroup, nColumns - 1);

}*/

/*  public boolean istype() {
    return fMethodStubsButtons.isSelected(0);
}

/**
 * Returns the current selection state of the 'Create Constructors' checkbox.
 *
 * @return the selection state of the 'Create Constructors' checkbox
 */
/*public boolean ischanel() {
    return fMethodStubsButtons.isSelected(1);
}*/

/**
 * Returns the current selection state of the 'Create inherited abstract  methods'
 * checkbox.
 *
 * @return the selection state of the 'Create inherited abstract methods' checkbox
 */
/*public boolean isCreateInherited() {
    return fMethodStubsButtons.isSelected(2);
}*/
/*public void setMethodStubSelection(boolean type, boolean chanel, boolean createInherited, boolean canBeModified) {
    fMethodStubsButtons.setSelection(0, type);
    fMethodStubsButtons.setSelection(1, chanel);
    fMethodStubsButtons.setSelection(2, createInherited);

    fMethodStubsButtons.setEnabled(canBeModified);
}*/






/**
 * Tests if the current workbench selection is a suitable container to use.
 */

private void initialize() {
    if (selection != null && selection.isEmpty() == false
            && selection instanceof IStructuredSelection) {
        IStructuredSelection ssel = (IStructuredSelection) selection;
        if (ssel.size() > 1)
            return;
        Object obj = ssel.getFirstElement();
        if (obj instanceof IResource) {
            IContainer container;
            if (obj instanceof IContainer)
                container = (IContainer) obj;
            else
                container = ((IResource) obj).getParent();
             containerText.setText(container.getFullPath().toString());
        }
    }
    fileText.setText("");
}

/**
 * Uses the standard container selection dialog to choose the new value for
 * the container field.
 */

private void handleBrowse() {
    ContainerSelectionDialog dialog = new ContainerSelectionDialog(
            getShell(), ResourcesPlugin.getWorkspace().getRoot(),  false,
            "Select new file container");
    if (dialog.open() == ContainerSelectionDialog.OK) {
        Object[] result = dialog.getResult();
        if (result.length == 1) {
            containerText.setText(((Path) result[0]).toString());
        }
    }
}

/**
 * Ensures that both text fields are set.
 */

private void dialogChanged() {
    IResource container = ResourcesPlugin.getWorkspace().getRoot()
            .findMember(new Path(getContainerName()));
    String fileName = getFileName();

    if (getContainerName().length() == 0) {
        updateStatus("File container must be specified");
        return;
    }
    if (container == null
            || (container.getType() & (IResource.PROJECT | IResource.FOLDER)) == 0) {
        updateStatus("File container must exist");
        return;
    }
    if (!container.isAccessible()) {
        updateStatus("Project must be writable");
        return;
    }
    if (fileName.length() == 0) {
        updateStatus("File name must be specified");
        return;
    }
    if (fileName.replace('\\', '/').indexOf('/', 1) > 0) {
        updateStatus("File name must be valid");
        return;
    }
    int dotLoc = fileName.lastIndexOf('.');
    if (dotLoc != -1) {
        String ext = fileName.substring(dotLoc + 1);
        if (ext.equalsIgnoreCase("ej") == false) {
            updateStatus("File extension must be \"ej\"");
            return;
        }
    }
    updateStatus(null);
}

private void updateStatus(String message) {
    setErrorMessage(message);
    setPageComplete(message == null);
}

public String getContainerName() {
    return containerText.getText();
}

public String getFileName() {
    return fileText.getText();
}
/*protected void createTypeMembers(IType type, ImportsManager imports, IProgressMonitor monitor) throws CoreException {
    boolean doMain= istype();
    boolean doConstr= ischanel();
    boolean doInherited= isCreateInherited();
    //createInheritedMethods(type, doConstr, doInherited, imports, new SubProgressMonitor(monitor, 1));

    if (doMain) {
        StringBuffer buf= new StringBuffer();
        final String lineDelim= "\n"; // OK, since content is formatted afterwards //$NON-NLS-1$
    //  if (isAddComments()) {
            String comment= CodeGeneration.getMethodComment(type.getCompilationUnit(), type.getTypeQualifiedName('.'), "main", new String[] { "args" }, new String[0], Signature.createTypeSignature("void", true), null, lineDelim); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
            if (comment != null) {
                buf.append(comment);
                buf.append(lineDelim);
            }
        //}
        buf.append("public static void main("); //$NON-NLS-1$
        //buf.append(imports.addImport("java.lang.String")); //$NON-NLS-1$
        buf.append("[] args) {"); //$NON-NLS-1$
        buf.append(lineDelim);
        final String content= CodeGeneration.getMethodBodyContent(type.getCompilationUnit(), type.getTypeQualifiedName('.'), "main", false, "", lineDelim); //$NON-NLS-1$ //$NON-NLS-2$
        if (content != null && content.length() != 0)
            buf.append(content);
        buf.append(lineDelim);
        buf.append("}"); //$NON-NLS-1$
        type.createMethod(buf.toString(), null, false, null);
    }

    //IDialogSettings dialogSettings= getDialogSettings();
    //if (dialogSettings != null) {
    //  IDialogSettings section= dialogSettings.getSection(PAGE_NAME);
    //  if (section == null) {
    //      section= dialogSettings.addNewSection(PAGE_NAME);
    //  }
        //section.put(SETTINGS_CREATECONSTR, ischanel());
        //section.put(SETTINGS_CREATEUNIMPLEMENTED, isCreateInherited());
    }

    //if (monitor != null) {
        //monitor.done();
//  }*/
} 

//}

1 个答案:

答案 0 :(得分:0)

使用setter和getter

SampleNewWizard.java

 .............
 public InputStream openContentStream() {
    String contents =
        "This is the initial file contents for *.ej file that should be word-sorted in the Preview page of the multi-page editor";
    if(page.getContent()!=null) {
        return new ByteArrayInputStream(page.getContent().getBytes());
    }
    return new ByteArrayInputStream(contents.getBytes());
}
  ............

SampleNewWizardPage.java

package amma.wizards;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogFieldGroup;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
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.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.ContainerSelectionDialog;



@SuppressWarnings("restriction")
public class SampleNewWizardPage extends WizardPage {
private Text containerText;

private Text fileText;

private ISelection selection;
private SelectionButtonDialogFieldGroup fMethodStubsButtons;
IType type;
StringBuffer buf= new StringBuffer();

private String content;
public String getContent() {
    return content;
}

public void setContent(String content) {
    this.content = content;
}

/**
 * Constructor for SampleNewWizardPage.
 * 
 * @param pageName
 */
public SampleNewWizardPage(ISelection selection) {
    super("wizardPage");
    setTitle("Multi-page Editor File");
    setDescription("This wizard creates a new file with *.ej extension that can be opened by a multi-page editor.");
    this.selection = selection;
    String[] buttonNames3= new String[] {"type","channel","inherited"   };
    fMethodStubsButtons= new SelectionButtonDialogFieldGroup(SWT.CHECK, buttonNames3, 1);
    fMethodStubsButtons.setLabelText(NewWizardMessages.NewClassWizardPage_methods_label);
}

/**
 * @see IDialogPage#createControl(Composite)
 */
public void createControl(Composite parent) {
    Composite container = new Composite(parent, SWT.NULL);
    GridLayout layout = new GridLayout();
    container.setLayout(layout);
    layout.numColumns = 3;
    layout.verticalSpacing = 9;
    Label label = new Label(container, SWT.NULL);
    label.setText("&Container:");

    containerText = new Text(container, SWT.BORDER | SWT.SINGLE);
    GridData gd = new GridData(GridData.FILL_HORIZONTAL);
    containerText.setLayoutData(gd);
    containerText.addModifyListener(new ModifyListener() {
        public void modifyText(ModifyEvent e) {
            dialogChanged();
        }
    });


    Button button = new Button(container, SWT.PUSH);
    button.setText("Browse...");
    button.addSelectionListener(new SelectionAdapter() {
        public void widgetSelected(SelectionEvent e) {
            handleBrowse();
        }
    });
    label = new Label(container, SWT.NULL);
    label.setText("&File name:"); 
    fileText = new Text(container, SWT.BORDER | SWT.SINGLE);

    gd = new GridData(GridData.FILL_HORIZONTAL);


    fileText.setLayoutData(gd);
    fileText.addModifyListener(new ModifyListener() {
        public void modifyText(ModifyEvent e) {
            dialogChanged();
        }
    });
    Label separator = new Label (container, SWT.SEPARATOR | SWT.HORIZONTAL);
    label = new Label(container, SWT.NULL);
    label.setText("&Select:"); 
     final Button mrButton = new Button(container, SWT.RADIO);
     mrButton.setText("Channel");
     final Button mrsButton = new Button(container, SWT.RADIO);
     mrsButton.setText("Type");

     mrButton.addListener (SWT.Selection, new Listener () {
            public void handleEvent (Event event) {

                final String lineDelim= "\n";
                if(mrButton.getSelection() == true)
                {
                    System.out.println("channel");
                    //String contents = "hai";
                    //SampleNewWizard.openContentStream(contents);
                    int dotLoc = getFileName().lastIndexOf('.');
                    String Name = getFileName().substring(0,dotLoc);
                    buf.append("channel "+Name);
                    buf.append("()");
                    buf.append(lineDelim);
                    buf.append("{");
                    buf.append(lineDelim);
                    buf.append("}");
                    buf.toString();
                    setContent(buf.toString()); 
                //  try {
                        //type.createMethod(buf.toString(), null, false, null);
                    //} catch (JavaModelException e) {
                        // TODO Auto-generated catch block
                        //e.printStackTrace();
                    //}
                    }
               IDialogSettings dialogSettings= getDialogSettings();
                if (dialogSettings != null) {
                    IDialogSettings section= dialogSettings.getSection(getFileName());
                    if (section == null) {
                    section= dialogSettings.addNewSection(getFileName());
            }
              }
            }
     });

     mrsButton.addListener (SWT.Selection, new Listener () {
            public void handleEvent (Event event) {
                final String lineDelim= "\n";
                if(mrsButton.getSelection() == true)
                {
                    System.out.println("type");
                    int dotLoc = getFileName().lastIndexOf('.');
                    String Name = getFileName().substring(0,dotLoc);
                    buf.append("Type "+Name);
                    buf.append("()");
                    buf.append(lineDelim);
                    buf.append("{");
                    buf.append(lineDelim);
                    buf.append("}");
                    buf.toString();
                    setContent(buf.toString()); 
                }
            }
        });

    initialize();
    dialogChanged();
    setControl(container);
}








/**
 * Tests if the current workbench selection is a suitable container to use.
 */

private void initialize() {
    if (selection != null && selection.isEmpty() == false
            && selection instanceof IStructuredSelection) {
        IStructuredSelection ssel = (IStructuredSelection) selection;
        if (ssel.size() > 1)
            return;
        Object obj = ssel.getFirstElement();
        if (obj instanceof IResource) {
            IContainer container;
            if (obj instanceof IContainer)
                container = (IContainer) obj;
            else
                container = ((IResource) obj).getParent();
            containerText.setText(container.getFullPath().toString());
        }
    }
    fileText.setText("");
}

/**
 * Uses the standard container selection dialog to choose the new value for
 * the container field.
 */

private void handleBrowse() {
    ContainerSelectionDialog dialog = new ContainerSelectionDialog(
            getShell(), ResourcesPlugin.getWorkspace().getRoot(), false,
            "Select new file container");
    if (dialog.open() == ContainerSelectionDialog.OK) {
        Object[] result = dialog.getResult();
        if (result.length == 1) {
            containerText.setText(((Path) result[0]).toString());
        }
    }
}

/**
 * Ensures that both text fields are set.
 */

private void dialogChanged() {
    IResource container = ResourcesPlugin.getWorkspace().getRoot()
            .findMember(new Path(getContainerName()));
    String fileName = getFileName();

    if (getContainerName().length() == 0) {
        updateStatus("File container must be specified");
        return;
    }
    if (container == null
            || (container.getType() & (IResource.PROJECT | IResource.FOLDER)) == 0) {
        updateStatus("File container must exist");
        return;
    }
    if (!container.isAccessible()) {
        updateStatus("Project must be writable");
        return;
    }
    if (fileName.length() == 0) {
        updateStatus("File name must be specified");
        return;
    }
    if (fileName.replace('\\', '/').indexOf('/', 1) > 0) {
        updateStatus("File name must be valid");
        return;
    }
    int dotLoc = fileName.lastIndexOf('.');
    if (dotLoc != -1) {
        String ext = fileName.substring(dotLoc + 1);
        if (ext.equalsIgnoreCase("ej") == false) {
            updateStatus("File extension must be \"ej\"");
            return;
        }
    }
    updateStatus(null);
}

private void updateStatus(String message) {
    setErrorMessage(message);
    setPageComplete(message == null);
}

public String getContainerName() {
    return containerText.getText();
}

public String getFileName() {
    return fileText.getText();
}

}