[jboss-cvs] jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards ...

Robert Stryker rawblem at gmail.com
Tue Aug 8 14:18:19 EDT 2006


  User: rawb    
  Date: 06/08/08 14:18:19

  Added:       as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards 
                        NewMBeanWizard.java
  Log:
  Wizards to Create MBean file, interface, and descriptor stubs. So far it's only one wizard for all three.  
  
  Revision  Changes    Path
  1.1      date: 2006/08/08 18:18:19;  author: rawb;  state: Exp;jbosside/as/plugins/org.jboss.ide.eclipse.as.ui/jbossui/org/jboss/ide/eclipse/as/ui/wizards/NewMBeanWizard.java
  
  Index: NewMBeanWizard.java
  ===================================================================
  package org.jboss.ide.eclipse.as.ui.wizards;
  
  import java.io.ByteArrayInputStream;
  import java.io.ByteArrayOutputStream;
  import java.io.OutputStreamWriter;
  import java.io.PrintWriter;
  import java.net.URI;
  import java.util.List;
  
  import org.eclipse.core.filesystem.EFS;
  import org.eclipse.core.filesystem.IFileStore;
  import org.eclipse.core.resources.IFile;
  import org.eclipse.core.resources.IResource;
  import org.eclipse.core.runtime.CoreException;
  import org.eclipse.core.runtime.IPath;
  import org.eclipse.core.runtime.IProgressMonitor;
  import org.eclipse.core.runtime.IStatus;
  import org.eclipse.core.runtime.NullProgressMonitor;
  import org.eclipse.core.runtime.Path;
  import org.eclipse.core.runtime.Preferences;
  import org.eclipse.core.runtime.SubProgressMonitor;
  import org.eclipse.jdt.core.ICompilationUnit;
  import org.eclipse.jdt.core.IJavaElement;
  import org.eclipse.jdt.core.IPackageFragment;
  import org.eclipse.jdt.core.IPackageFragmentRoot;
  import org.eclipse.jdt.core.IType;
  import org.eclipse.jdt.core.JavaConventions;
  import org.eclipse.jdt.core.compiler.IProblem;
  import org.eclipse.jdt.core.dom.AST;
  import org.eclipse.jdt.core.dom.ASTParser;
  import org.eclipse.jdt.core.dom.CompilationUnit;
  import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
  import org.eclipse.jdt.internal.corext.util.Messages;
  import org.eclipse.jdt.internal.corext.util.Resources;
  import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
  import org.eclipse.jdt.internal.ui.dialogs.TextFieldNavigationHandler;
  import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
  import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
  import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
  import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
  import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField;
  import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
  import org.eclipse.jdt.ui.wizards.NewTypeWizardPage;
  import org.eclipse.jface.viewers.IStructuredSelection;
  import org.eclipse.jface.wizard.IWizardPage;
  import org.eclipse.swt.SWT;
  import org.eclipse.swt.layout.GridLayout;
  import org.eclipse.swt.widgets.Composite;
  import org.eclipse.swt.widgets.Text;
  import org.eclipse.ui.INewWizard;
  import org.eclipse.ui.IWorkbench;
  import org.eclipse.wst.sse.core.internal.encoding.CommonEncodingPreferenceNames;
  import org.eclipse.wst.xml.core.internal.XMLCorePlugin;
  import org.eclipse.wst.xml.ui.internal.wizards.NewModelWizard;
  import org.jboss.ide.eclipse.as.core.util.ASDebug;
  
  public class NewMBeanWizard extends NewModelWizard implements INewWizard {
  
  	private IStructuredSelection sel;
  	private MBeanInterfacePage interfacePage;
  	private MBeanPage mbeanPage;
  	private NewFilePage newFilePage;
  	private static String INTERFACE_NAME = "__INTERFACE_NAME__";
  
  	public NewMBeanWizard() {
  	}
  
      public void createPageControls(Composite pageContainer) {
      	super.createPageControls(pageContainer);
      	newFilePage.setVisible(false);
      }
  
  	
  	
  	public boolean performFinish() {
  		if( !canFinish() ) return false;
  		try {
  			interfacePage.createType(new NullProgressMonitor());
  			mbeanPage.createType(new NullProgressMonitor());
  			
  			if( mbeanPage.shouldCreateDescriptor()) {
  				newFilePage.setFileName(mbeanPage.getCreatedType().getElementName() + "-service.xml");
  				
  				IPath fullPath = newFilePage.getContainerFullPath();
  
  				IPath newPath = new Path(fullPath.segment(0));
  
  				// BLOCKING on eclipse bug 153135
  //				IPath newPath = new Path(fullPath.segment(0)).append("META-INF");
  //				newFilePage.setContainerFullPath(newPath);
  				
  				IFile newFile = newFilePage.createNewFile();
  				createStubServiceDescriptor(newFile);
  				ASDebug.p("create it", this);
  			} else {
  				ASDebug.p("DO NOT CREATE", this);
  			}
  		} catch( Throwable jme) {
  			jme.printStackTrace();
  		}
  		
  		return true;
  	}
  
  	public void init(IWorkbench workbench, IStructuredSelection selection) {
  		sel = selection;
  	}
  
  	public void addPages() {
  		interfacePage = new MBeanInterfacePage();
  		mbeanPage = new MBeanPage();
  		addPage(interfacePage);
  		addPage(mbeanPage);
  		interfacePage.init(sel);
  		mbeanPage.init(sel);
  		
  		
  		newFilePage = new NewFilePage(sel);
  		newFilePage.defaultName = "blah";
  		Preferences preference = XMLCorePlugin.getDefault().getPluginPreferences();
  		String ext = "xml";
  		newFilePage.defaultFileExtension = "."+ext; //$NON-NLS-1$
  		newFilePage.filterExtensions = new String[] {"*.xml"};
  		addPage(newFilePage);
  		
  	}
  	
  	private class MBeanInterfacePage extends NewTypeWizardPage {
  
  		private StringDialogField fMBeanNameDialogField;
  		private StringDialogField fMBeanInterfaceNameDialogField;
  		private IStatus fMBeanNameStatus;
  		
  		
  		public MBeanInterfacePage() {
  			super(false, "New MBean Interface");
  			
  			setTitle("New MBean Interface"); 
  			setDescription("Create the interface for the MBean"); 
  
  			
  			fMBeanNameDialogField= new StringDialogField();
  			fMBeanNameDialogField.setDialogFieldListener(new MBeanPage1DialogFieldAdapter());
  			fMBeanNameDialogField.setLabelText("MBean Name"); 
  
  			fMBeanInterfaceNameDialogField= new StringDialogField();
  			fMBeanInterfaceNameDialogField.setDialogFieldListener(new MBeanPage1DialogFieldAdapter());
  			fMBeanInterfaceNameDialogField.setLabelText("Interface Name"); 
  		}
  
  		private class MBeanPage1DialogFieldAdapter implements IDialogFieldListener {
  			public void dialogFieldChanged(DialogField field) {
  				String fieldName = null;
  				if( field == fMBeanNameDialogField ) {
  					String txt = fMBeanNameDialogField.getText();
  					fMBeanInterfaceNameDialogField.getTextControl(null).setText(txt + "MBean");
  					fieldName = INTERFACE_NAME;
  					fTypeNameStatus = typeNameChanged(getTypeName());
  					fMBeanNameStatus = typeNameChanged(fMBeanNameDialogField.getText());
  				}
  				handleFieldChanged(fieldName);
  				
  			}
  		}
  		public void createControl(Composite parent) {
  		      this.initializeDialogUnits(parent);
  
  		      Composite composite = new Composite(parent, SWT.NONE);
  
  		      int nColumns = 4;
  
  		      GridLayout layout = new GridLayout();
  		      layout.numColumns = nColumns;
  		      composite.setLayout(layout);
  
  		      this.createContainerControls(composite, nColumns);
  		      this.createPackageControls(composite, nColumns);
  		      this.createSeparator(composite, nColumns);
  		      this.createMBeanNameControls(composite, nColumns);
  		      this.createTypeNameControls(composite, nColumns);
  		      this.createSuperClassControls(composite, nColumns);
  		      this.createSuperInterfacesControls(composite, nColumns);
  		      
  		      fMBeanInterfaceNameDialogField.getTextControl(null).setEditable(false);
  
  		      
  		      this.setControl(composite);
  		} 
  		
  		public String getTypeName() {
  			return fMBeanInterfaceNameDialogField.getText();
  		}
  
  		
  		protected void createTypeNameControls(Composite composite, int nColumns) {
  			fMBeanInterfaceNameDialogField.doFillIntoGrid(composite, nColumns - 1);
  			DialogField.createEmptySpace(composite);
  			
  			Text text= fMBeanInterfaceNameDialogField.getTextControl(null);
  			LayoutUtil.setWidthHint(text, getMaxFieldWidth());
  			TextFieldNavigationHandler.install(text);
  		}
  
  		
  		protected void createMBeanNameControls(Composite composite, int nColumns) {
  			fMBeanNameDialogField.doFillIntoGrid(composite, nColumns - 1);
  			DialogField.createEmptySpace(composite);
  			
  			Text text= fMBeanNameDialogField.getTextControl(null);
  			LayoutUtil.setWidthHint(text, getMaxFieldWidth());
  			TextFieldNavigationHandler.install(text);
  		}
  
  
  		public void init(IStructuredSelection selection) {
  			IJavaElement jelem= getInitialJavaElement(selection);
  			initContainerPage(jelem);
  			initTypePage(jelem);
  		}
  		
  		protected void handleFieldChanged(String fieldName) {
  			super.handleFieldChanged(fieldName);
  			
  			if( fieldName == INTERFACE_NAME) {
  				mbeanPage.setMBeanName(fMBeanNameDialogField.getText());
  			}
  			doStatusUpdate();
  		}
  
  		// ------ validation --------
  		private void doStatusUpdate() {
  			// status of all used components
  			IStatus[] status= new IStatus[] {
  				fContainerStatus,
  				fTypeNameStatus,
  				fMBeanNameStatus,
  				fSuperClassStatus,
  				fSuperInterfacesStatus
  			};
  			
  			// the mode severe status will be displayed and the OK button enabled/disabled.
  			updateStatus(status);
  		}
  
  		
  		protected IStatus typeNameChanged(String typeNameWithParameters) {
  			StatusInfo status= new StatusInfo();
  			IType currType = null;
  
  
  			// must not be empty
  			if (typeNameWithParameters.length() == 0) {
  				status.setError(NewWizardMessages.NewTypeWizardPage_error_EnterTypeName); 
  				return status;
  			}
  			
  			String typeName= getTypeNameWithoutParameters(typeNameWithParameters);
  			if (typeName.indexOf('.') != -1) {
  				status.setError(NewWizardMessages.NewTypeWizardPage_error_QualifiedName); 
  				return status;
  			}
  			IStatus val= JavaConventions.validateJavaTypeName(typeName);
  			if (val.getSeverity() == IStatus.ERROR) {
  				status.setError(Messages.format(NewWizardMessages.NewTypeWizardPage_error_InvalidTypeName, val.getMessage())); 
  				return status;
  			} else if (val.getSeverity() == IStatus.WARNING) {
  				status.setWarning(Messages.format(NewWizardMessages.NewTypeWizardPage_warning_TypeNameDiscouraged, val.getMessage())); 
  				// continue checking
  			}		
  
  			// must not exist
  			IPackageFragment pack= getPackageFragment();
  			if (pack != null) {
  				ICompilationUnit cu= pack.getCompilationUnit(getCompilationUnitName(typeName));
  				currType= cu.getType(typeName);
  				IResource resource= cu.getResource();
  
  				if (resource.exists()) {
  					status.setError(NewWizardMessages.NewTypeWizardPage_error_TypeNameExists + "(" + typeName + ")"); 
  					return status;
  				}
  				URI location= resource.getLocationURI();
  				if (location != null) {
  					try {
  						IFileStore store= EFS.getStore(location);
  						if (store.fetchInfo().exists()) {
  							status.setError(NewWizardMessages.NewTypeWizardPage_error_TypeNameExistsDifferentCase); 
  							return status;
  						}
  					} catch (CoreException e) {
  						status.setError(Messages.format(
  							NewWizardMessages.NewTypeWizardPage_error_uri_location_unkown, 
  							Resources.getLocationString(resource)));
  					}
  				}
  			}
  			
  			if (typeNameWithParameters != typeName) {
  				IPackageFragmentRoot root= getPackageFragmentRoot();
  				if (root != null) {
  					if (!JavaModelUtil.is50OrHigher(root.getJavaProject())) {
  						status.setError(NewWizardMessages.NewTypeWizardPage_error_TypeParameters); 
  						return status;
  					}
  					String typeDeclaration= "class " + typeNameWithParameters + " {}"; //$NON-NLS-1$//$NON-NLS-2$
  					ASTParser parser= ASTParser.newParser(AST.JLS3);
  					parser.setSource(typeDeclaration.toCharArray());
  					parser.setProject(root.getJavaProject());
  					CompilationUnit compilationUnit= (CompilationUnit) parser.createAST(null);
  					IProblem[] problems= compilationUnit.getProblems();
  					if (problems.length > 0) {
  						status.setError(Messages.format(NewWizardMessages.NewTypeWizardPage_error_InvalidTypeName, problems[0].getMessage())); 
  						return status;
  					}
  				}
  			}
  			return status;
  		}
  		
  		private String getTypeNameWithoutParameters(String typeNameWithParameters) {
  			int angleBracketOffset= typeNameWithParameters.indexOf('<');
  			if (angleBracketOffset == -1) {
  				return typeNameWithParameters;
  			} else {
  				return typeNameWithParameters.substring(0, angleBracketOffset);
  			}
  		}
  
  	
  	}
  	
  	private class MBeanPage extends NewTypeWizardPage {
  
  		private StringDialogField fMBeanNameDialogField;
  		private SelectionButtonDialogField fDescriptorDialogField;
  		public MBeanPage() {
  			super(true, "MBean Class");
  			
  			setTitle("New MBean Class"); 
  			setDescription("Create the concrete MBean Class"); 
  
  			MBeanPage2DialogFieldAdapter adapter = new MBeanPage2DialogFieldAdapter();
  			fMBeanNameDialogField= new StringDialogField();
  			fMBeanNameDialogField.setDialogFieldListener(adapter);
  			fMBeanNameDialogField.setLabelText("MBean Name"); 
  			
  			fDescriptorDialogField = new SelectionButtonDialogField(SWT.CHECK);
  			fDescriptorDialogField.setDialogFieldListener(adapter);
  			fDescriptorDialogField.setLabelText("Create -service.xml file?");
  		}
  
  		private class MBeanPage2DialogFieldAdapter implements IDialogFieldListener {
  			public void dialogFieldChanged(DialogField field) {
  				ASDebug.p("field changed: " + field, this);
  			}
  		}
  
  		public void createControl(Composite parent) {
  		      this.initializeDialogUnits(parent);
  
  		      Composite composite = new Composite(parent, SWT.NONE);
  
  		      int nColumns = 4;
  
  		      GridLayout layout = new GridLayout();
  		      layout.numColumns = nColumns;
  		      composite.setLayout(layout);
  
  		      this.createContainerControls(composite, nColumns);
  		      this.createPackageControls(composite, nColumns);
  		      this.createSeparator(composite, nColumns);
  		      this.createMBeanTypeNameControls(composite, nColumns);
  		      this.createSuperClassControls(composite, nColumns);
  		      this.createSuperInterfacesControls(composite, nColumns);
  		      this.createSeparator(composite, nColumns);
  		      this.createDescriptorControls(composite, nColumns);
  		      
  		      fMBeanNameDialogField.getTextControl(null).setEditable(false);
  
  		      this.setControl(composite);
  		}
  		
  		public List getSuperInterfaces() {
  			List interfaces = super.getSuperInterfaces();
  			if( interfacePage.getCreatedType() != null ) {
  				IType t = interfacePage.getCreatedType();
  				interfaces.add(t.getFullyQualifiedName());
  			}
  			return interfaces;
  		}
  
  		protected void createDescriptorControls(Composite composite, int nColumns) {
  			fDescriptorDialogField.doFillIntoGrid(composite, nColumns);
  		}
  		
  		protected void createMBeanTypeNameControls(Composite composite, int nColumns) {
  			fMBeanNameDialogField.doFillIntoGrid(composite, nColumns - 1);
  			DialogField.createEmptySpace(composite);
  			
  			Text text= fMBeanNameDialogField.getTextControl(null);
  			LayoutUtil.setWidthHint(text, getMaxFieldWidth());
  			TextFieldNavigationHandler.install(text);
  		}
  
  		
  		public String getTypeName() {
  			return fMBeanNameDialogField.getText();
  		}
  
  		public void setMBeanName(String s) {
  			fMBeanNameDialogField.getTextControl(null).setText(s);
  		}
  		
  		public void init(IStructuredSelection selection) {
  			IJavaElement jelem= getInitialJavaElement(selection);
  			initContainerPage(jelem);
  			initTypePage(jelem);
  		}
  		
  		protected void createTypeMembers(IType type, ImportsManager imports, IProgressMonitor monitor) throws CoreException {
  			createInheritedMethods(type, true, true, imports, new SubProgressMonitor(monitor, 1));
  		}
  
  		public boolean shouldCreateDescriptor() {
  			return fDescriptorDialogField.isSelected();
  		}
  		
  		public IWizardPage getNextPage() {
  			return null;
  		}
  	}
  	
  	
  	private void createStubServiceDescriptor(IFile newFile) throws Exception {
  			ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  			String charSet = getUserPreferredCharset();
  
  			PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream, charSet));
  			writer.println("<?xml version=\"1.0\" encoding=\"" + charSet + "\"?>"); //$NON-NLS-1$ //$NON-NLS-2$
  			writer.println("<server>");
  			writer.println("\t<mbean code=\"" + mbeanPage.getCreatedType().getFullyQualifiedName() + "\" name=\"your.domain:key=value\">");
  			writer.println("\t</mbean>");
  			writer.println("</server>");
  			writer.flush();
  			outputStream.close();
  
  			ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
  			newFile.setContents(inputStream, true, true, null);
  			inputStream.close();
  	}
  	
  	private String getUserPreferredCharset() {
  		Preferences preference = XMLCorePlugin.getDefault().getPluginPreferences();
  		String charSet = preference.getString(CommonEncodingPreferenceNames.OUTPUT_CODESET);
  		return charSet;
  	}
  
  
  }
  
  
  



More information about the jboss-cvs-commits mailing list