Changeset 739
- Timestamp:
- 06/22/07 12:59:34 (2 years ago)
- Files:
-
- trunk/plugins/org.jalcedo.generator.client.jpa.ui/src/org/jalcedo/generator/client/jpa/ui/JpaEntityEditorGeneratorUIActivator.java (modified) (2 diffs)
- trunk/plugins/org.jalcedo.generator.client.jpa.ui/src/org/jalcedo/generator/client/jpa/ui/internal/resource/Messages.java (modified) (1 diff)
- trunk/plugins/org.jalcedo.generator.client.jpa.ui/src/org/jalcedo/generator/client/jpa/ui/internal/resource/messages.properties (modified) (1 diff)
- trunk/plugins/org.jalcedo.generator.client.jpa.ui/src/org/jalcedo/generator/client/jpa/ui/internal/wizards/EntitySelectionPage.java (modified) (8 diffs)
- trunk/plugins/org.jalcedo.generator.client.jpa.ui/src/org/jalcedo/generator/client/jpa/ui/internal/wizards/IdSelectionPage.java (deleted)
- trunk/plugins/org.jalcedo.generator.client.jpa.ui/src/org/jalcedo/generator/client/jpa/ui/internal/wizards/JpaEditorGenerateWizard.java (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/plugins/org.jalcedo.generator.client.jpa.ui/src/org/jalcedo/generator/client/jpa/ui/JpaEntityEditorGeneratorUIActivator.java
r611 r739 1 1 package org.jalcedo.generator.client.jpa.ui; 2 2 3 import org.eclipse.jface.resource.ImageDescriptor; 3 4 import org.eclipse.ui.plugin.AbstractUIPlugin; 4 5 import org.osgi.framework.BundleContext; … … 48 49 } 49 50 51 /** 52 * Returns an image descriptor for the image file at the given 53 * plug-in relative path 54 * 55 * @param path the path 56 * @return the image descriptor 57 */ 58 public static ImageDescriptor getImageDescriptor(String path) { 59 return imageDescriptorFromPlugin(PLUGIN_ID, path); 60 } 50 61 } trunk/plugins/org.jalcedo.generator.client.jpa.ui/src/org/jalcedo/generator/client/jpa/ui/internal/resource/Messages.java
r612 r739 27 27 private Messages() { 28 28 } 29 public static String ProjectConfiguration_0;30 public static String ProjectConfiguration_1;31 public static String ProjectConfiguration_2;32 29 33 30 public static String ProjectConfiguration_Edit_ManifestMF_Error; trunk/plugins/org.jalcedo.generator.client.jpa.ui/src/org/jalcedo/generator/client/jpa/ui/internal/resource/messages.properties
r612 r739 11 11 12 12 ProjectConfiguration_IO_ERROR=IO error occured. 13 ProjectConfiguration_0=org.eclipse.core.runtime14 ProjectConfiguration_1=org.eclipse.jface15 ProjectConfiguration_2=org.eclipse.ui16 13 ProjectConfiguration_CANNOT_CLOSE=Cannot close file. 17 14 ProjectConfiguration_FILE_NOT_FOUND=File not found. trunk/plugins/org.jalcedo.generator.client.jpa.ui/src/org/jalcedo/generator/client/jpa/ui/internal/wizards/EntitySelectionPage.java
r670 r739 11 11 package org.jalcedo.generator.client.jpa.ui.internal.wizards; 12 12 13 import java.beans.Introspector; 14 import java.util.ArrayList; 15 import java.util.Collection; 16 13 17 import org.eclipse.core.resources.IProject; 18 import org.eclipse.core.resources.IProjectDescription; 19 import org.eclipse.core.runtime.CoreException; 14 20 import org.eclipse.core.runtime.IStatus; 15 21 import org.eclipse.jdt.core.ICompilationUnit; 16 22 import org.eclipse.jdt.core.IJavaElement; 17 import org.eclipse.jdt.core.I JavaProject;23 import org.eclipse.jdt.core.IPackageFragment; 18 24 import org.eclipse.jdt.core.IType; 19 25 import org.eclipse.jdt.core.JavaModelException; 20 import org.eclipse.jdt.ui.IJavaElementSearchConstants; 21 import org.eclipse.jdt.ui.JavaUI; 26 import org.eclipse.jdt.core.dom.AST; 27 import org.eclipse.jdt.core.dom.ASTParser; 28 import org.eclipse.jdt.core.dom.IBinding; 29 import org.eclipse.jdt.core.dom.ITypeBinding; 22 30 import org.eclipse.jdt.ui.wizards.NewTypeWizardPage; 31 import org.eclipse.jface.viewers.ArrayContentProvider; 32 import org.eclipse.jface.viewers.CheckboxTableViewer; 33 import org.eclipse.jface.viewers.ISelectionChangedListener; 23 34 import org.eclipse.jface.viewers.IStructuredSelection; 35 import org.eclipse.jface.viewers.LabelProvider; 36 import org.eclipse.jface.viewers.SelectionChangedEvent; 24 37 import org.eclipse.swt.SWT; 25 import org.eclipse.swt.events.ModifyEvent;26 import org.eclipse.swt.events.ModifyListener;27 import org.eclipse.swt.events.SelectionAdapter;28 import org.eclipse.swt.events.SelectionEvent;29 38 import org.eclipse.swt.layout.GridData; 30 39 import org.eclipse.swt.layout.GridLayout; … … 32 41 import org.eclipse.swt.widgets.Composite; 33 42 import org.eclipse.swt.widgets.Label; 34 import org.eclipse.swt.widgets.Text; 35 import org.eclipse.ui.IWorkbenchWindow; 36 import org.eclipse.ui.PlatformUI; 37 import org.eclipse.ui.dialogs.SelectionDialog; 43 import org.jalcedo.generator.client.jpa.JpaEditorGeneratorActivator; 44 import org.jalcedo.generator.client.jpa.model.TargetEntity; 38 45 39 46 /** 40 * BeanEditorを生成するために必要な値を入力するフォームを表示するWizardPage.47 * EntityEditorを生成するために必要な値を入力するフォームを表示するWizardPage. 41 48 * <p> 42 49 * 以下の入力項目がある。ウィザード起動時のユーザの選択からデフォルト値を 43 50 * 設定するが、値が取得できない場合はユーザに入力してもらう必要がある。 44 51 * <ul> 45 * <li> BeanEditorを出力するソースフォルダ。</li>46 * <li> BeanEditorを出力するルートとなるパッケージ名。</li>47 * <li>ターゲットとなる Bean。</li>52 * <li>EntityEditorを出力するソースフォルダ。</li> 53 * <li>EntityEditorを出力するルートとなるパッケージ名。</li> 54 * <li>ターゲットとなるEntity。</li> 48 55 * <li>jalcedoのライブラリを追加するかどうか.</li> 49 56 * <li>生成したView をプラグインに登録するかどうか.</li> 50 57 * </ul> 51 * @author nozawa 58 * @author nozawa, koshi 52 59 * 53 60 */ 54 // TODO add contents assistant to beanTypeText.55 61 public class EntitySelectionPage extends NewTypeWizardPage { 56 private IJavaProject javaProject;57 58 private Text beanTypeText;59 60 private IType beanType = null;61 62 62 private Button libraryAddCheckBox; 63 63 64 64 private Button extensionAddCheckBox; 65 65 66 private CheckboxTableViewer entityTables; 67 68 private Collection<TargetEntity> entity = new ArrayList<TargetEntity>(); 69 70 private String JPA_ID = "Id"; 71 72 private String JPA_ENTITY = "Entity"; 73 66 74 public EntitySelectionPage() { 67 75 super(true, "EntitySelectionPage"); 68 setTitle("BeanSlectionPage"); 69 setDescription("select target bean"); 70 76 setTitle("EntitySlectionPage"); 77 setDescription("select target entity"); 71 78 } 72 79 … … 79 86 IJavaElement javaElement = getInitialJavaElement(selection); 80 87 initContainerPage(javaElement); 81 initTypePage(javaElement); 82 initBeanType(javaElement); 83 javaProject = javaElement.getJavaProject(); 84 } 85 86 /** 87 * 88 * ユーザの選択した要素が java クラスのモデルだったとき、 89 * そのクラスを TargetBean の デフォルト値に設定する。 90 * 91 * @param javaElement 92 */ 93 private void initBeanType(IJavaElement javaElement) { 94 if (javaElement instanceof IType) { 95 beanType = (IType) javaElement; 96 } else if (javaElement instanceof ICompilationUnit) { 97 beanType = ((ICompilationUnit) javaElement).findPrimaryType(); 98 } 88 setEntity(); 99 89 } 100 90 … … 122 112 createSeparator(composite, nColumns); 123 113 124 create BeanSelectionControls(composite, nColumns);114 createEntitySelectionControls(composite, nColumns); 125 115 126 116 createOptionCheckBoxes(composite, nColumns); 127 117 118 // doValidate(); 128 119 setControl(composite); 129 120 } … … 134 125 * 135 126 */ 136 private void do StatusUpdate() {127 private void doValidate() { 137 128 IStatus[] status = new IStatus[] { fContainerStatus, fPackageStatus }; 138 129 updateStatus(status); 139 140 if (beanType == null) { 141 setErrorMessage("Input fully qualified name of TargetBean."); 130 if(this.getCheckedEntity().length == 0){ 131 setErrorMessage("Select entity class"); 142 132 setPageComplete(false); 143 133 return; 144 } 134 }else if (!hasPluginNature(this.getJavaProject().getProject())) { 135 setErrorMessage("Project is not a plug-in project. Select a plugin project or convert this to a plugin project. "); 136 setPageComplete(false); 137 return; 138 } 139 } 140 141 /** 142 * プロジェクトが PluginNature を持っているか判別する 143 * 144 * @param project 145 * @return 146 */ 147 private boolean hasPluginNature(IProject project) { 148 IProjectDescription description; 149 try { 150 description = project.getDescription(); 151 return description.hasNature("org.eclipse.pde.PluginNature"); 152 } catch (CoreException e) { 153 e.printStackTrace(); 154 } 155 return false; 145 156 } 146 157 … … 150 161 protected void handleFieldChanged(String fieldName) { 151 162 super.handleFieldChanged(fieldName); 152 doStatusUpdate(); 153 } 154 155 /** 156 * TargetBean 選択の項目を作成する。 163 IStatus[] status = new IStatus[] { fContainerStatus, fPackageStatus }; 164 updateStatus(status); 165 } 166 167 /* (non-Javadoc) 168 * @see org.eclipse.jdt.ui.wizards.NewElementWizardPage#setVisible(boolean) 169 */ 170 @Override 171 public void setVisible(boolean visible) { 172 super.setVisible(visible); 173 doValidate(); 174 } 175 176 /** 177 * TargetEntity 選択の項目を作成する。 157 178 * 158 179 * @param composite 159 180 * @param nColumns 160 181 */ 161 private void create BeanSelectionControls(Composite composite, int nColumns) {182 private void createEntitySelectionControls(Composite composite, int nColumns) { 162 183 Label label = new Label(composite, SWT.NULL); 163 label.setText("&Target Bean:"); 164 165 beanTypeText = new Text(composite, SWT.BORDER | SWT.SINGLE); 166 GridData gd = new GridData(GridData.FILL_HORIZONTAL); 167 gd.horizontalSpan = nColumns - 2; 168 beanTypeText.setLayoutData(gd); 169 beanTypeText.addModifyListener(new BeanTypeTextModifyListener()); 170 171 Button button = new Button(composite, SWT.PUSH); 172 GridData gd2 = new GridData(GridData.FILL_HORIZONTAL); 173 button.setText("Browse..."); 174 button.setLayoutData(gd2); 175 button.addSelectionListener(new ChooseBeanButtonSelectionAdapter()); 176 } 177 184 label.setText("&Target Entity:"); 185 186 GridData gd = new GridData(GridData.FILL_BOTH); 187 gd.horizontalSpan = nColumns; 188 entityTables = CheckboxTableViewer.newCheckList(composite, SWT.BORDER | SWT.V_SCROLL); 189 entityTables.setContentProvider(new ArrayContentProvider()); 190 entityTables.setLabelProvider(new EntitySelectionLabelProvider()); 191 entityTables.getTable().setLayoutData(gd); 192 entityTables.addSelectionChangedListener(new EntitySelectionChangedListener()); 193 entityTables.setInput(this.entity); 194 } 195 196 private void setEntity(){ 197 ASTParser parser= ASTParser.newParser(AST.JLS3); 198 try { 199 for (IJavaElement pkg : getPackageFragmentRoot().getChildren()) { 200 for (ICompilationUnit unit : ((IPackageFragment)pkg).getCompilationUnits()) { 201 for (IType type : unit.getAllTypes()) { 202 parser.setSource(type.getCompilationUnit()); 203 IBinding[] bindings= parser.createBindings(new IJavaElement[] { type }, null); 204 if (bindings.length == 1 && bindings[0] instanceof ITypeBinding) { 205 if(this.equalsAnnotation(bindings[0], JPA_ENTITY)){ 206 for(IBinding field: ((ITypeBinding)bindings[0]).getDeclaredFields()){ 207 if(this.equalsAnnotation(field, JPA_ID)){ 208 String propertyName = field.getName().substring(0, 1).toUpperCase() + field.getName().substring(1); 209 propertyName = Introspector.decapitalize(propertyName); 210 this.entity.add(JpaEditorGeneratorActivator.getDefault().createTargetEntity(type, propertyName)); 211 } 212 } 213 for(IBinding method: ((ITypeBinding)bindings[0]).getDeclaredMethods()){ 214 if(this.equalsAnnotation(method, JPA_ID)){ 215 String propertyName = Introspector.decapitalize(method.getName().substring(3)); 216 this.entity.add(JpaEditorGeneratorActivator.getDefault().createTargetEntity(type, propertyName)); 217 } 218 } 219 } 220 } 221 } 222 } 223 } 224 } catch (JavaModelException e) { 225 // TODO Auto-generated catch block 226 e.printStackTrace(); 227 } 228 } 229 230 private boolean equalsAnnotation(IBinding element, String annotationName){ 231 for(IBinding annotation : element.getAnnotations()){ 232 if(annotation.getName().equalsIgnoreCase(annotationName)){ 233 return true; 234 } 235 } 236 return false; 237 } 238 239 /** 240 * TargetEntityのモデルを取得する 241 * 242 * @return TargetEntityのモデル 243 */ 244 public Object[] getCheckedEntity(){ 245 return entityTables.getCheckedElements(); 246 } 247 178 248 /** 179 249 * オプション選択のチェックボックスを作成する。 … … 199 269 200 270 /** 201 * BeanTypeの入力テキストボックスを取得する202 * @return203 */204 public Text getBeanTypeText() {205 return beanTypeText;206 }207 208 /**209 * TargetBeanのモデルを取得する210 *211 * @return TargetBeanのモデル212 */213 public IType getBeanType() {214 return beanType;215 }216 217 /**218 271 * ライブラリ追加のオプションの値を取得する 219 272 * … … 233 286 } 234 287 235 /* (non-Javadoc) 236 * @see org.eclipse.jdt.ui.wizards.NewElementWizardPage#setVisible(boolean) 237 */ 238 @Override 239 public void setVisible(boolean visible) { 240 super.setVisible(visible); 241 if (beanType != null) { 242 beanTypeText.setText(beanType.getFullyQualifiedName()); 243 } 244 doStatusUpdate(); 245 } 246 247 /** 248 * TargetBean 入力のテキストボックスの値が変更されたとき、そのクラスが 249 * 存在するか調べ、値のチェックを実行する。 250 * 251 * @author nozawa 252 * 253 */ 254 class BeanTypeTextModifyListener implements ModifyListener { 255 256 public void modifyText(ModifyEvent event) { 257 try { 258 beanType = javaProject.findType(beanTypeText.getText()); 259 doStatusUpdate(); 260 } catch (JavaModelException e) { 261 setMessage(e.getMessage()); 288 class EntitySelectionChangedListener implements ISelectionChangedListener{ 289 public void selectionChanged(SelectionChangedEvent event) { 290 doValidate(); 291 } 292 293 } 294 295 class EntitySelectionLabelProvider extends LabelProvider { 296 public String getText(Object obj) { 297 String text = null; 298 if (obj instanceof TargetEntity) { 299 text = ((TargetEntity) obj).getEntity().getFullyQualifiedName(); 262 300 } 263 } 264 } 265 266 /** 267 * TargetBean 入力項目のボタンが押されたとき、bean選択ダイアログを表示し、 268 * 値をテキストボックスにセットする。 269 * 270 * @author nozawa 271 * 272 */ 273 class ChooseBeanButtonSelectionAdapter extends SelectionAdapter { 274 275 public void widgetSelected(SelectionEvent e) { 276 IType choosedBean = chooseTargetBean(javaProject.getProject()); 277 beanTypeText.setText(choosedBean.getFullyQualifiedName()); 278 } 279 280 /** 281 * Open type selection dialog, and it returns IType of choosed bean. 282 * 283 * @param project 284 * @return IType of choosed bean 285 */ 286 private IType chooseTargetBean(IProject project) { 287 IWorkbenchWindow window = PlatformUI.getWorkbench() 288 .getActiveWorkbenchWindow(); 289 290 try { 291 SelectionDialog dialog = JavaUI.createTypeDialog(window 292 .getShell(), window, project, 293 IJavaElementSearchConstants.CONSIDER_ALL_TYPES, false); 294 dialog.setTitle("select Bean"); 295 dialog.setMessage("Select Bean:"); 296 297 if (dialog.open() == SelectionDialog.OK) { 298 Object[] selection = dialog.getResult(); 299 return (IType) selection[0]; 300 } 301 } catch (JavaModelException e) { 302 setMessage(e.getMessage()); 303 } 304 return null; 305 } 306 307 } 308 301 return text; 302 } 303 } 309 304 } 305 trunk/plugins/org.jalcedo.generator.client.jpa.ui/src/org/jalcedo/generator/client/jpa/ui/internal/wizards/JpaEditorGenerateWizard.java
r670 r739 16 16 import org.eclipse.core.runtime.CoreException; 17 17 import org.eclipse.core.runtime.IProgressMonitor; 18 import org.eclipse.core.runtime.IStatus; 19 import org.eclipse.core.runtime.Status; 18 20 import org.eclipse.jdt.core.IPackageFragment; 19 21 import org.eclipse.jdt.core.IPackageFragmentRoot; 20 22 import org.eclipse.jdt.core.IType; 23 import org.eclipse.jface.dialogs.ErrorDialog; 21 24 import org.eclipse.jface.viewers.IStructuredSelection; 22 25 import org.eclipse.jface.wizard.Wizard; … … 24 27 import org.eclipse.ui.IWorkbench; 25 28 import org.eclipse.ui.actions.WorkspaceModifyOperation; 26 import org.jalcedo.generator.client.jpa.JpaSourceGenerator;27 import org.jalcedo.generator.client.jpa.ui.internal.config.ProjectConfiguration;28 29 import org.jalcedo.generator.client.beans.BeanEditorGeneratorActivator; 29 30 import org.jalcedo.generator.client.beans.model.BeanEditorInfo; 30 31 import org.jalcedo.generator.client.beans.model.TargetBean; 32 import org.jalcedo.generator.client.jpa.JpaSourceGenerator; 33 import org.jalcedo.generator.client.jpa.model.TargetEntity; 34 import org.jalcedo.generator.client.jpa.ui.JpaEntityEditorGeneratorUIActivator; 35 import org.jalcedo.generator.client.jpa.ui.internal.config.ProjectConfiguration; 31 36 32 37 /** … … 36 41 public class JpaEditorGenerateWizard extends Wizard implements INewWizard { 37 42 private EntitySelectionPage entitySelectionPage; 38 39 private IdSelectionPage idSelectionPage;40 43 41 44 private PersistenceUnitSelectionPage persistenceUnitSelectionPage; … … 61 64 @Override 62 65 protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException { 63 TargetBean targetBean = createTargetBean(entitySelectionPage.getBeanType(), idSelectionPage.getIdName()); 64 BeanEditorInfo entityEditorInfo = createBeanEditorInfo(targetBean, entitySelectionPage.getPackageFragment()); 65 JpaSourceGenerator jpaSourceGenerator = new JpaSourceGenerator(persistenceUnitSelectionPage.getPersistenceUnitName()); 66 jpaSourceGenerator.generateAll(entityEditorInfo, monitor); 67 68 IProject project = entityEditorInfo.getTargetSourceDir().getJavaProject().getProject(); 69 70 ProjectConfiguration config = new ProjectConfiguration(project); 71 if (entitySelectionPage.getLibraryAddCheck()) { 72 config.addJalcedoLibraryDependency(monitor); 66 try { 67 BeanEditorGeneratorActivator generatorPlugin = BeanEditorGeneratorActivator.getDefault(); 68 JpaSourceGenerator jpaSourceGenerator = new JpaSourceGenerator(persistenceUnitSelectionPage.getPersistenceUnitName()); 69 BeanEditorInfo entityEditorInfo = null; 70 for(Object obj : entitySelectionPage.getCheckedEntity()){ 71 TargetEntity entityType = (TargetEntity)obj; 72 TargetBean targetBean = generatorPlugin.createTargetBean(entityType.getEntity(), entityType.getId()); 73 entityEditorInfo = generatorPlugin.createBeanEditorInfo(targetBean, entitySelectionPage.getPackageFragment()); 74 jpaSourceGenerator.generateAll(entityEditorInfo, monitor); 75 } 76 77 IProject project = entityEditorInfo.getTargetSourceDir().getJavaProject().getProject(); 78 79 ProjectConfiguration config = new ProjectConfiguration(project); 80 if (entitySelectionPage.getLibraryAddCheck()) { 81 config.addJalcedoLibraryDependency(monitor); 82 } 83 84 if (entitySelectionPage.getExtensionAddCheck()) { 85 config.addBeanEditorToPluginXml(entityEditorInfo, monitor); 86 } 87 }finally{ 88 monitor.done(); 73 89 } 74 75 if (entitySelectionPage.getExtensionAddCheck()) {76 config.addBeanEditorToPluginXml(entityEditorInfo, monitor);77 }78 79 monitor.done();80 90 } 81 91 }; … … 84 94 this.getContainer().run(false, false, operation); 85 95 } catch (InvocationTargetException e) { 86 // TODO 例外処理 96 IStatus status = new Status(IStatus.ERROR, JpaEntityEditorGeneratorUIActivator.PLUGIN_ID, IStatus.OK, e.getCause().getMessage(), e); 97 JpaEntityEditorGeneratorUIActivator.getDefault().getLog().log(status); 98 ErrorDialog.openError(this.getShell(), "ERROR", "Error occured. ", status); 87 99 e.printStackTrace(); 88 System.out.println(e.getCause());89 100 } catch (InterruptedException e) { 90 // TODO 例外処理 101 IStatus status = new Status(IStatus.ERROR, JpaEntityEditorGeneratorUIActivator.PLUGIN_ID, IStatus.OK, e.getCause().getMessage(), e); 102 JpaEntityEditorGeneratorUIActivator.getDefault().getLog().log(status); 103 ErrorDialog.openError(this.getShell(), "ERROR", "Error occured.", status); 91 104 e.printStackTrace(); 92 105 } … … 95 108 } 96 109 97 /**98 * 各ページの内容から、BeanEditorInfoを生成する.99 *100 * @return entityEditorInfo101 */102 //TODO BeanEditorGenerateWizardのメソッドをpublicにする or @Override103 private BeanEditorInfo createBeanEditorInfo(TargetBean targetBean, IPackageFragment packageFragment) {104 return BeanEditorGeneratorActivator.getDefault().createBeanEditorInfo(targetBean, packageFragment);105 }106 107 private TargetBean createTargetBean(IType entityType, String idName) throws CoreException {108 return BeanEditorGeneratorActivator.getDefault().createTargetBean(entityType, idName);109 }110 111 110 /* 112 111 * (non-Javadoc) … … 125 124 entitySelectionPage.init(this.selection); 126 125 addPage(entitySelectionPage); 127 128 idSelectionPage = new IdSelectionPage();129 addPage(idSelectionPage);130 126 131 127 persistenceUnitSelectionPage = new PersistenceUnitSelectionPage();
