What actually changed in this commit? it looks like there was a
reformat applied, so I can't tell what the real changes were ... I'm
also curious what's different about your config than mine, because I
did jar tests and it worked for me. Can you send me a sample project
that wasn't working?
On Jan 28, 2009, at 9:13 AM, hprang..bjectstyle.org wrote:
> Author: hprange
> Date: 2009-01-28 09:13:26 -0500 (Wed, 28 Jan 2009)
> New Revision: 5654
>
> Modified:
> trunk/woproject/wolips/core/plugins/
> org.objectstyle.wolips.eomodeler/java/org/objectstyle/wolips/
> eomodeler/editors/EOModelEditor.java
> Log:
> Fix for NullPointerException while opening EOModels inside jar
> files. It still doesn't open the model correctly though.
>
> Modified: trunk/woproject/wolips/core/plugins/
> org.objectstyle.wolips.eomodeler/java/org/objectstyle/wolips/
> eomodeler/editors/EOModelEditor.java
> ===================================================================
> --- trunk/woproject/wolips/core/plugins/
> org.objectstyle.wolips.eomodeler/java/org/objectstyle/wolips/
> eomodeler/editors/EOModelEditor.java 2009-01-27 22:34:47 UTC (rev
> 5653)
> +++ trunk/woproject/wolips/core/plugins/
> org.objectstyle.wolips.eomodeler/java/org/objectstyle/wolips/
> eomodeler/editors/EOModelEditor.java 2009-01-28 14:13:26 UTC (rev
> 5654)
>.. -1,35 +1,35 @@
> /*
> *
> ====================================================================
> - *
> + *
> * The ObjectStyle Group Software License, Version 1.0
> - *
> + *
> * Copyright (c) 2006 The ObjectStyle Group and individual authors
> of the
> * software. All rights reserved.
> - *
> + *
> * Redistribution and use in source and binary forms, with or without
> * modification, are permitted provided that the following
> conditions are met:
> - *
> + *
> * 1. Redistributions of source code must retain the above copyright
> notice,
> * this list of conditions and the following disclaimer.
> - *
> + *
> * 2. Redistributions in binary form must reproduce the above
> copyright notice,
> * this list of conditions and the following disclaimer in the
> documentation
> * and/or other materials provided with the distribution.
> - *
> + *
> * 3. The end-user documentation included with the redistribution,
> if any, must
> * include the following acknowlegement: "This product includes
> software
> * developed by the ObjectStyle Group (http://objectstyle.org/)."
> Alternately,
> * this acknowlegement may appear in the software itself, if and
> wherever such
> * third-party acknowlegements normally appear.
> - *
> + *
> * 4. The names "ObjectStyle Group" and "Cayenne" must not be used
> to endorse or
> * promote products derived from this software without prior written
> permission.
> * For written permission, please contact andru..bjectstyle.org.
> - *
> + *
> * 5. Products derived from this software may not be called
> "ObjectStyle" nor
> * may "ObjectStyle" appear in their names without prior written
> permission of
> * the ObjectStyle Group.
> - *
> + *
> * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
> WARRANTIES,
> * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
> MERCHANTABILITY AND
> * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
> SHALL THE
>.. -41,11 +41,11 @@
> * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
> THIS SOFTWARE,
> * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> *
> ====================================================================
> - *
> + *
> * This software consists of voluntary contributions made by many
> individuals on
> * behalf of the ObjectStyle Group. For more information on the
> ObjectStyle
> * Group, please see <http://objectstyle.org/>.
> - *
> + *
> */
> package org.objectstyle.wolips.eomodeler.editors;
>
>.. -130,385 +130,307 @@
> import org.objectstyle.wolips.eomodeler.utils.EclipseFileUtils;
>
> public class EOModelEditor extends MultiPageEditorPart implements
> IResourceChangeListener, ITabbedPropertySheetPageContributor,
> ISelectionProvider, IEOModelEditor {
> - public static final String EOMODEL_EDITOR_ID =
> "org.objectstyle.wolips.eomodeler.editors.EOModelEditor";
> + protected class ArgumentDeletedRefresher extends
> AbstractAddRemoveChangeRefresher<EOArgument> {
> + public ArgumentDeletedRefresher() {
> + super("ArgumentDeleted");
> + }
>
> - public static final String EOMODEL_PAGE = "eomodel";
> + public void changeSelection(final ISelection selection) {
> + EOModelEditor.this.setSelection(selection);
> + }
>
> - public static final String EOENTITY_PAGE = "eoentity";
> + ..verride
> + protected void objectsAdded(final List<EOArgument> _addedObjects) {
> + // DO NOTHING
> + }
>
> - public static final String EOSTOREDPROCEDURE_PAGE =
> "eostoredprocedure";
> + ..verride
> + protected void objectsRemoved(final List<EOArgument>
> _removedObjects) {
> + EOModelEditor.this.setSelection(new
> StructuredSelection(EOModelEditor.this.getSelectedStoredProcedure()));
> +
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOSTOREDPROCEDURE_PAGE));
> + }
> + }
>
> - private EOEntitiesTableEditor myEntitiesTableEditor;
> + protected class AttributeAndRelationshipDeletedRefresher extends
> AbstractAddRemoveChangeRefresher<IEOAttribute> {
> + public AttributeAndRelationshipDeletedRefresher() {
> + super("AttributeAndRelationshipDeleted");
> + }
>
> - private EOEntityEditor myEntityEditor;
> + public void changeSelection(final ISelection selection) {
> + EOModelEditor.this.setSelection(selection);
> + }
>
> - private EOArgumentsTableEditor myStoredProcedureEditor;
> + ..verride
> + protected void objectsAdded(final List<IEOAttribute>
> _addedObjects) {
> + // DO NOTHING
> + }
>
> - private EOModelContentOutlinePage myContentOutlinePage;
> + ..verride
> + protected void objectsRemoved(final List<IEOAttribute>
> _removedObjects) {
> + EOModelEditor.this.setSelection(new
> StructuredSelection(EOModelEditor.this.getSelectedEntity()));
> +
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOENTITY_PAGE));
> + }
> + }
>
> - private ListenerList mySelectionChangedListeners;
> + protected class DatabaseConfigsChangeRefresher extends
> AbstractAddRemoveChangeRefresher<EODatabaseConfig> {
> + public DatabaseConfigsChangeRefresher() {
> + super("DatabaseConfigsChange");
> + }
>
> - private IStructuredSelection mySelection;
> + public void changeSelection(final ISelection selection) {
> + EOModelEditor.this.setSelection(selection);
> + }
>
> - private PropertyChangeListener myDirtyModelListener;
> + ..verride
> + protected void objectsAdded(final List<EODatabaseConfig>
> _addedObjects) {
> + // DO NOTHING
> + }
>
> - private EntitiesChangeRefresher myEntitiesChangeListener;
> + ..verride
> + protected void objectsRemoved(final List<EODatabaseConfig>
> _removedObjects) {
> + EOModelEditor.this.setSelection(new
> StructuredSelection(EOModelEditor.this.getModel()));
> +
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOMODEL_PAGE));
> + }
> + }
>
> - private FetchSpecsChangeRefresher myFetchSpecsChangeListener;
> + protected class DirtyModelListener implements
> PropertyChangeListener {
> + public void propertyChange(final PropertyChangeEvent _event) {
> + String propertyName = _event.getPropertyName();
> + if (EOModel.DIRTY.equals(propertyName)) {
> + EOModelEditor.this.editorDirtyStateChanged();
> + }
> + }
> + }
>
> - private EntityIndexesChangeRefresher myEntityIndexesChangeListener;
> + protected class EntitiesChangeRefresher extends
> AbstractAddRemoveChangeRefresher<EOEntity> {
> + public EntitiesChangeRefresher() {
> + super("EntitiesChange");
> + }
>
> - private StoredProceduresChangeRefresher
> myStoredProceduresChangeListener;
> + public void changeSelection(final ISelection selection) {
> + EOModelEditor.this.setSelection(selection);
> +
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOENTITY_PAGE));
> + }
>
> - private DatabaseConfigsChangeRefresher
> myDatabaseConfigsChangeListener;
> + ..verride
> + protected void objectsAdded(final List<EOEntity> _addedObjects) {
> + // DO NOTHING
> + }
>
> - private AttributeAndRelationshipDeletedRefresher
> myAttributeAndRelationshipListener;
> + ..verride
> + protected void objectsRemoved(final List<EOEntity>
> _removedObjects) {
> + EOModelEditor.this.setSelection(new
> StructuredSelection(EOModelEditor.this.getModel()));
> +
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOMODEL_PAGE));
> + }
> + }
>
> - private ArgumentDeletedRefresher myArgumentListener;
> + protected class EntityIndexesChangeRefresher extends
> AbstractAddRemoveChangeRefresher<EOEntityIndex> {
> + public EntityIndexesChangeRefresher() {
> + super("EntityIndexesChange");
> + }
>
> - private EOStoredProcedure mySelectedStoredProcedure;
> + public void changeSelection(final ISelection selection) {
> + EOModelEditor.this.setSelection(selection);
> +
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOENTITY_PAGE));
> + }
>
> - private EOEntity mySelectedEntity;
> + ..verride
> + protected void objectsAdded(final List<EOEntityIndex>
> _addedObjects) {
> + // DO NOTHING
> + }
>
> - private EOEntity myOpeningEntity;
> + ..verride
> + protected void objectsRemoved(final List<EOEntityIndex>
> _removedObjects) {
> + EOModelEditor.this.setSelection(new
> StructuredSelection(EOModelEditor.this.getModel()));
> +
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOMODEL_PAGE));
> + }
> + }
>
> - private EOModel myModel;
> + protected class EOArgumentSelectionChangedListener implements
> ISelectionChangedListener {
> + public void selectionChanged(final SelectionChangedEvent _event) {
> + IStructuredSelection selection = (IStructuredSelection)
> _event.getSelection();
> + setSelection(selection);
> + }
> + }
>
> - private Set<EOModelVerificationFailure> myLoadFailures;
> + protected class EOEntitySelectionChangedListener implements
> ISelectionChangedListener {
> + public void selectionChanged(final SelectionChangedEvent _event) {
> + IStructuredSelection selection = (IStructuredSelection)
> _event.getSelection();
> + setSelection(selection);
> + }
> + }
>
> - private boolean myEntityPageVisible;
> + protected class EOModelContentSelectionChangedListener implements
> ISelectionChangedListener {
> + private Object mySelectedObject;
>
> - private boolean myStoredProcedurePageVisible;
> -
> - private int mySelectionDepth;
> -
> - private Object myCreatePagesLock = new Object();
> -
> - private int _failuresHashCode;
> -
> - public EOModelEditor() {
> - mySelectionChangedListeners = new ListenerList();
> - myDirtyModelListener = new DirtyModelListener();
> - myEntitiesChangeListener = new EntitiesChangeRefresher();
> - myFetchSpecsChangeListener = new FetchSpecsChangeRefresher();
> - myEntityIndexesChangeListener = new EntityIndexesChangeRefresher();
> - myStoredProceduresChangeListener = new
> StoredProceduresChangeRefresher();
> - myDatabaseConfigsChangeListener = new
> DatabaseConfigsChangeRefresher();
> - myAttributeAndRelationshipListener = new
> AttributeAndRelationshipDeletedRefresher();
> - myArgumentListener = new ArgumentDeletedRefresher();
> - ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
> + public void selectionChanged(final SelectionChangedEvent _event) {
> + IStructuredSelection selection = (IStructuredSelection)
> _event.getSelection();
> + Object selectedObject = selection.getFirstElement();
> + setSelection(selection, false);
> + if (myContentOutlinePage.isSelectedWithOutline()) {
> + EOModelEditor.this.doubleClickedObjectInOutline(selectedObject);
> + } else {
> + if (mySelectedObject == null) {
> + mySelectedObject = selectedObject;
> + } else if (mySelectedObject == selectedObject) {
> + EOModelEditor.this.doubleClickedObjectInOutline(selectedObject);
> + mySelectedObject = null;
> + } else {
> + mySelectedObject = selectedObject;
> + }
> + }
> + }
> }
>
> - public IUndoContext getUndoContext() {
> - return new EOModelEditorUndoContext();
> - }
> -
> protected class EOModelEditorUndoContext implements IUndoContext {
> public String getLabel() {
> return
> EOModelUtils.getUndoContext(EOModelEditor.this.getModel()).getLabel();
> }
>
> - public boolean matches(IUndoContext context) {
> + public boolean matches(final IUndoContext context) {
> return
> EOModelUtils
> .getUndoContext(EOModelEditor.this.getModel()).matches(context);
> }
> }
>
> - public EOModelContentOutlinePage getContentOutlinePage() {
> - if (myContentOutlinePage == null) {
> - myContentOutlinePage = new EOModelContentOutlinePage(this);
> - myContentOutlinePage.addSelectionChangedListener(new
> EOModelContentSelectionChangedListener());
> + protected class EOModelSelectionChangedListener implements
> ISelectionChangedListener {
> + public void selectionChanged(final SelectionChangedEvent _event) {
> + IStructuredSelection selection = (IStructuredSelection)
> _event.getSelection();
> + setSelection(selection);
> }
> - return myContentOutlinePage;
> }
>
> - public EOModel getModel() {
> - return myModel;
> - }
> + protected class FetchSpecsChangeRefresher extends
> AbstractAddRemoveChangeRefresher<EOFetchSpecification> {
> + public FetchSpecsChangeRefresher() {
> + super("FetchSpecsChange");
> + }
>
> - public EOEntity getSelectedEntity() {
> - return mySelectedEntity;
> - }
> + public void changeSelection(final ISelection selection) {
> + EOModelEditor.this.setSelection(selection);
> +
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOENTITY_PAGE));
> + }
>
> - public String getContributorId() {
> - return getSite().getId();
> - }
> + ..verride
> + protected void objectsAdded(final List<EOFetchSpecification>
> _addedObjects) {
> + // DO NOTHING
> + }
>
> - public Object getAdapter(Class _adapterClass) {
> - Object adapter;
> - if (_adapterClass == IPropertySheetPage.class) {
> - adapter = new TabbedPropertySheetPage(this);
> - } else if (_adapterClass == IContentOutlinePage.class) {
> - IContentOutlinePage outlinePage = getContentOutlinePage();
> - adapter = outlinePage;
> - } else {
> - adapter = super.getAdapter(_adapterClass);
> + ..verride
> + protected void objectsRemoved(final List<EOFetchSpecification>
> _removedObjects) {
> + EOModelEditor.this.setSelection(new
> StructuredSelection(EOModelEditor.this.getModel()));
> +
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOMODEL_PAGE));
> }
> - return adapter;
> }
>
> - protected int getPageNum(String _pageType) {
> - int pageNum;
> - if (_pageType == EOModelEditor.EOENTITY_PAGE) {
> - pageNum = getPageNum(myEntityEditor);
> - } else if (_pageType == EOModelEditor.EOMODEL_PAGE) {
> - pageNum = getPageNum(myEntitiesTableEditor);
> - } else if (_pageType == EOModelEditor.EOSTOREDPROCEDURE_PAGE) {
> - pageNum = getPageNum(myStoredProcedureEditor);
> - } else {
> - pageNum = -1;
> + protected class StoredProceduresChangeRefresher extends
> AbstractAddRemoveChangeRefresher<EOStoredProcedure> {
> + public StoredProceduresChangeRefresher() {
> + super("StoredProceduresChange");
> }
> - return pageNum;
> - }
>
> - protected int getPageNum(IEditorPart _editorPart) {
> - int matchingPageNum = -1;
> - int pageCount = getPageCount();
> - for (int pageNum = 0; matchingPageNum == -1 && pageNum <
> pageCount; pageNum++) {
> - IEditorPart editorPart = getEditor(pageNum);
> - if (editorPart == _editorPart) {
> - matchingPageNum = pageNum;
> - }
> + public void changeSelection(final ISelection selection) {
> + EOModelEditor.this.setSelection(selection);
> +
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOSTOREDPROCEDURE_PAGE));
> }
> - return matchingPageNum;
> +
> + ..verride
> + protected void objectsAdded(final List<EOStoredProcedure>
> _addedObjects) {
> + // DO NOTHING
> + }
> +
> + ..verride
> + protected void objectsRemoved(final List<EOStoredProcedure>
> _removedObjects) {
> + EOModelEditor.this.setSelection(new
> StructuredSelection(EOModelEditor.this.getModel()));
> +
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOMODEL_PAGE));
> + }
> }
>
> - protected void createPages() {
> - synchronized (myCreatePagesLock) {
> - try {
> - myEntitiesTableEditor = new EOEntitiesTableEditor();
> + public static final String EOMODEL_EDITOR_ID =
> "org.objectstyle.wolips.eomodeler.editors.EOModelEditor";
>
> - addPage(myEntitiesTableEditor, getEditorInput());
> - setPageText(getPageNum(EOModelEditor.EOMODEL_PAGE),
> Messages.getString("EOModelEditor.entitiesTab"));
> + public static final String EOMODEL_PAGE = "eomodel";
>
> - myEntityEditor = new EOEntityEditor();
> + public static final String EOENTITY_PAGE = "eoentity";
>
> - EOModelSelectionChangedListener modelSelectionChangedListener =
> new EOModelSelectionChangedListener();
> -
> myEntitiesTableEditor
> .addSelectionChangedListener(modelSelectionChangedListener);
> - myEntitiesTableEditor.setModel(myModel);
> + public static final String EOSTOREDPROCEDURE_PAGE =
> "eostoredprocedure";
>
> - EOEntitySelectionChangedListener entitySelectionChangedListener
> = new EOEntitySelectionChangedListener();
> -
> myEntityEditor
> .addSelectionChangedListener(entitySelectionChangedListener);
> + private EOEntitiesTableEditor myEntitiesTableEditor;
>
> - myStoredProcedureEditor = new EOArgumentsTableEditor();
> - EOArgumentSelectionChangedListener
> argumentSelectionChangedListener = new
> EOArgumentSelectionChangedListener();
> -
> myStoredProcedureEditor
> .addSelectionChangedListener(argumentSelectionChangedListener);
> + private EOEntityEditor myEntityEditor;
>
> - if (myOpeningEntity != null) {
> - setSelectedEntity(myOpeningEntity);
> - setActivePage(getPageNum(EOModelEditor.EOENTITY_PAGE));
> - }
> + private EOArgumentsTableEditor myStoredProcedureEditor;
>
> - } catch (PartInitException e) {
> - ErrorDialog.openError(getSite().getShell(), "Error creating
> editor.", null, e.getStatus());
> - }
> - }
> - }
> + private EOModelContentOutlinePage myContentOutlinePage;
>
> - protected void setEntityPageVisible(boolean _entityPageVisible) {
> - try {
> - if (_entityPageVisible) {
> - if (!myEntityPageVisible) {
> - addPage(myEntityEditor, getEditorInput());
> - }
> - String entityName = mySelectedEntity.getName();
> - if (entityName == null) {
> - entityName = "?";
> - }
> - setPageText(getPageNum(EOModelEditor.EOENTITY_PAGE), entityName);
> - } else if (myEntityPageVisible) {
> - removePage(getPageNum(EOModelEditor.EOENTITY_PAGE));
> - }
> - myEntityPageVisible = _entityPageVisible;
> - } catch (PartInitException e) {
> - ErrorDialog.openError(getSite().getShell(), "Error creating
> editor.", null, e.getStatus());
> - }
> - }
> + private final ListenerList mySelectionChangedListeners;
>
> - protected void setStoredProcedurePageVisible(boolean
> _storedProcedurePageVisible) {
> - try {
> - if (_storedProcedurePageVisible) {
> - if (!myStoredProcedurePageVisible) {
> - addPage(myStoredProcedureEditor, getEditorInput());
> - }
> - String storedProcedureName = mySelectedStoredProcedure.getName();
> - if (storedProcedureName == null) {
> - storedProcedureName = "?";
> - }
> - setPageText(getPageNum(EOModelEditor.EOSTOREDPROCEDURE_PAGE),
> storedProcedureName);
> - } else if (myStoredProcedurePageVisible) {
> - removePage(getPageNum(EOModelEditor.EOSTOREDPROCEDURE_PAGE));
> - }
> - myStoredProcedurePageVisible = _storedProcedurePageVisible;
> - } catch (PartInitException e) {
> - ErrorDialog.openError(getSite().getShell(), "Error creating
> editor.", null, e.getStatus());
> - }
> - }
> + private IStructuredSelection mySelection;
>
> - public void setSelectedEntity(EOEntity _selectedEntity) {
> - if (!ComparisonUtils.equals(mySelectedEntity, _selectedEntity)) {
> - if (mySelectedEntity != null) {
> -
> mySelectedEntity.removePropertyChangeListener(EOEntity.ATTRIBUTES,
> myAttributeAndRelationshipListener);
> -
> mySelectedEntity
> .removePropertyChangeListener(EOEntity.RELATIONSHIPS,
> myAttributeAndRelationshipListener);
> - }
> - mySelectedEntity = _selectedEntity;
> - if (mySelectedEntity != null) {
> - mySelectedEntity.addPropertyChangeListener(EOEntity.ATTRIBUTES,
> myAttributeAndRelationshipListener);
> -
> mySelectedEntity.addPropertyChangeListener(EOEntity.RELATIONSHIPS,
> myAttributeAndRelationshipListener);
> - }
> - if (_selectedEntity == null) {
> - setEntityPageVisible(false);
> - } else {
> - setEntityPageVisible(true);
> - }
> - myEntitiesTableEditor.setSelectedEntity(_selectedEntity);
> - myEntityEditor.setEntity(_selectedEntity);
> - // Fix a problem where the entity properties view does not refresh
> - // This is a hack, but if we steal focus onto the outline, it DOES
> - // refresh
> - updatePartName();
> - }
> - if (_selectedEntity != null) {
> - setSelectedStoredProcedure(null);
> - }
> - }
> + private final PropertyChangeListener myDirtyModelListener;
>
> - public EOStoredProcedure getSelectedStoredProcedure() {
> - return mySelectedStoredProcedure;
> - }
> + private final EntitiesChangeRefresher myEntitiesChangeListener;
>
> - public void setSelectedStoredProcedure(EOStoredProcedure
> _selectedStoredProcedure) {
> - if (!ComparisonUtils.equals(mySelectedStoredProcedure,
> _selectedStoredProcedure)) {
> - if (mySelectedStoredProcedure != null) {
> -
> mySelectedStoredProcedure
> .removePropertyChangeListener(EOStoredProcedure.ARGUMENTS,
> myArgumentListener);
> - }
> - mySelectedStoredProcedure = _selectedStoredProcedure;
> - if (mySelectedStoredProcedure != null) {
> -
> mySelectedStoredProcedure
> .addPropertyChangeListener(EOStoredProcedure.ARGUMENTS,
> myArgumentListener);
> - }
> - if (_selectedStoredProcedure == null) {
> - setStoredProcedurePageVisible(false);
> - } else {
> - setStoredProcedurePageVisible(true);
> - }
> -
> myStoredProcedureEditor.setStoredProcedure(_selectedStoredProcedure);
> - updatePartName();
> - }
> - if (_selectedStoredProcedure != null) {
> - setSelectedEntity(null);
> - }
> - }
> + private final FetchSpecsChangeRefresher myFetchSpecsChangeListener;
>
> - public void dispose() {
> - ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
> + private final EntityIndexesChangeRefresher
> myEntityIndexesChangeListener;
>
> - myEntitiesChangeListener.stop();
> - myStoredProceduresChangeListener.stop();
> - myDatabaseConfigsChangeListener.stop();
> - myFetchSpecsChangeListener.stop();
> - myEntityIndexesChangeListener.stop();
> + private final StoredProceduresChangeRefresher
> myStoredProceduresChangeListener;
>
> - super.dispose();
> + private final DatabaseConfigsChangeRefresher
> myDatabaseConfigsChangeListener;
>
> - switchFromEntityModelerPerspective();
> - }
> + private final AttributeAndRelationshipDeletedRefresher
> myAttributeAndRelationshipListener;
>
> - public void doSave(IProgressMonitor monitor) {
> - // if (!myModel.isEditing()) {
> - //
> ErrorUtils.openErrorDialog(Display.getDefault().getActiveShell(),
> - // "You cannot save this model because it is read-only.");
> - // return;
> - // }
> - showBusy(true);
> - try {
> - IEditorInput input = getEditorInput();
> - if (input != null && myModel != null) {
> - Set<EOModelVerificationFailure> failures = new
> HashSet<EOModelVerificationFailure>();
> + private final ArgumentDeletedRefresher myArgumentListener;
>
> - for (EOModel model : myModel.getModelGroup().getModels()) {
> - if (model.isDirty()) {
> - monitor.beginTask("Checking " + model.getName() + " ...",
> IProgressMonitor.UNKNOWN);
> - try {
> - model.verify(failures);
> - if (!model.canSave()) {
> - failures.add(new EOModelVerificationFailure(model, "You
> modified the model '" + model.getName() + "', but you are not able
> to save it to '" + model.getIndexURL() + "'.", false));
> - }
> - } finally {
> - monitor.done();
> - }
> - }
> - }
> + private EOStoredProcedure mySelectedStoredProcedure;
>
> - handleModelErrors(failures, false);
> + private EOEntity mySelectedEntity;
>
> - for (EOModel model : myModel.getModelGroup().getModels()) {
> - if (model.isDirty() && model.canSave()) {
> - monitor.beginTask("Saving " + model.getName() + " ...",
> IProgressMonitor.UNKNOWN);
> - try {
> - model.save();
> + private EOEntity myOpeningEntity;
>
> - IFile eclipseIndexFile =
> EclipseFileUtils.getEclipseFile(myModel.getIndexURL());
> - if (eclipseIndexFile != null) {
> -
> eclipseIndexFile
> .getParent().getParent().refreshLocal(IResource.DEPTH_INFINITE,
> monitor);
> - }
> - } finally {
> - monitor.done();
> - }
> - }
> - }
> - }
> - } catch (Throwable t) {
> -
> ErrorUtils.openErrorDialog(Display.getDefault().getActiveShell(), t);
> - } finally {
> - showBusy(false);
> - }
> - }
> + private EOModel myModel;
>
> - public boolean isDirty() {
> - boolean dirty = false;
> - if (myModel != null) {
> - if (myModel.isDirty()) {
> - dirty = true;
> - } else if (myModel.getModelGroup() != null) {
> - dirty = myModel.getModelGroup().isDirty();
> - }
> - }
> - return dirty;
> - }
> + private Set<EOModelVerificationFailure> myLoadFailures;
>
> - public void doSaveAs() {
> - doSave(null);
> - }
> + private boolean myEntityPageVisible;
>
> - public void revert() {
> - boolean confirmed =
> MessageDialog.openConfirm(Display.getDefault().getActiveShell(),
> Messages.getString("EOModelEditor.revertTitle"),
> Messages.getString("EOModelEditor.revertMessage"));
> - if (confirmed) {
> - try {
> - init((IEditorSite) getSite(), getEditorInput());
> - } catch (PartInitException e) {
> - e.printStackTrace();
> - }
> - }
> + private boolean myStoredProcedurePageVisible;
> +
> + private int mySelectionDepth;
> +
> + private final Object myCreatePagesLock = new Object();
> +
> + private int _failuresHashCode;
> +
> + public EOModelEditor() {
> + mySelectionChangedListeners = new ListenerList();
> + myDirtyModelListener = new DirtyModelListener();
> + myEntitiesChangeListener = new EntitiesChangeRefresher();
> + myFetchSpecsChangeListener = new FetchSpecsChangeRefresher();
> + myEntityIndexesChangeListener = new EntityIndexesChangeRefresher();
> + myStoredProceduresChangeListener = new
> StoredProceduresChangeRefresher();
> + myDatabaseConfigsChangeListener = new
> DatabaseConfigsChangeRefresher();
> + myAttributeAndRelationshipListener = new
> AttributeAndRelationshipDeletedRefresher();
> + myArgumentListener = new ArgumentDeletedRefresher();
> + ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
> }
>
> - public void _loadInBackground(IProgressMonitor progressMonitor) {
> + public void _loadInBackground(final IProgressMonitor
> progressMonitor) {
> myLoadFailures = new LinkedHashSet<EOModelVerificationFailure>();
> -
> +
> try {
> IEditorInput editorInput = getEditorInput();
> URI indexURL = null;
> if (editorInput instanceof IURIEditorInput) {
> indexURL = ((IURIEditorInput) editorInput).getURI();
> - }
> - else if (editorInput instanceof IStorageEditorInput) {
> - // MS: This is a total hackfest here ... This supports double-
> clicking an index.eomodeld from
> + } else if (editorInput instanceof IStorageEditorInput) {
> + // MS: This is a total hackfest here ... This supports
> + // double-clicking an index.eomodeld from
> // inside of a jar
> - IStorage storage =
> ((IStorageEditorInput)editorInput).getStorage();
> + IStorage storage = ((IStorageEditorInput)
> editorInput).getStorage();
> Class jarEntryClass = storage.getClass();
> - IPath jarEntryPath =
> (IPath)jarEntryClass.getMethod("getFullPath").invoke(storage);
> + IPath jarEntryPath = (IPath)
> jarEntryClass.getMethod("getFullPath").invoke(storage);
> Object root =
> jarEntryClass.getMethod("getPackageFragmentRoot").invoke(storage);
> Class packageFragmentRootClass = root.getClass();
> - IResource jarFile =
> (IResource
> )packageFragmentRootClass
> .getMethod("getUnderlyingResource").invoke(root);
> - indexURL = new URI("jar:" +
> jarFile.getLocation().toFile().toURL() + "!" +
> jarEntryPath.toPortableString());
> + IPath jarFile = (IPath)
> packageFragmentRootClass.getMethod("getPath").invoke(root);
> + indexURL = new URI("jar:" + jarFile.toFile().toURL() + "!" +
> jarEntryPath.toPortableString());
> }
> if (myModel != null) {
> if (myModel.getModelGroup() != null) {
>.. -618,19 +540,11 @@
> }
> }
>
> - public void init(IEditorSite site, IEditorInput editorInput)
> throws PartInitException {
> - try {
> - switchToEntityModelerPerspective();
> - super.init(site, editorInput);
> -
> - LoadEOModelWorkspaceJob loadModelJob = new
> LoadEOModelWorkspaceJob(this, editorInput);
> - loadModelJob.schedule();
> - } catch (WorkbenchException e) {
> - e.printStackTrace();
> - }
> + public void addSelectionChangedListener(final
> ISelectionChangedListener _listener) {
> + mySelectionChangedListeners.add(_listener);
> }
>
> - protected int
> computeFailuresHashCode(Set<EOModelVerificationFailure> failures) {
> + protected int computeFailuresHashCode(final
> Set<EOModelVerificationFailure> failures) {
> StringBuffer sb = new StringBuffer();
> for (EOModelVerificationFailure failure : failures) {
> sb.append(failure.getMessage());
>.. -638,13 +552,229 @@
> return sb.toString().hashCode();
> }
>
> - protected void handleModelErrors(final
> Set<EOModelVerificationFailure> failures, boolean forceOpen) {
> +..verride
> + protected void createPages() {
> + synchronized (myCreatePagesLock) {
> + try {
> + myEntitiesTableEditor = new EOEntitiesTableEditor();
> +
> + addPage(myEntitiesTableEditor, getEditorInput());
> + setPageText(getPageNum(EOModelEditor.EOMODEL_PAGE),
> Messages.getString("EOModelEditor.entitiesTab"));
> +
> + myEntityEditor = new EOEntityEditor();
> +
> + EOModelSelectionChangedListener modelSelectionChangedListener =
> new EOModelSelectionChangedListener();
> +
> myEntitiesTableEditor
> .addSelectionChangedListener(modelSelectionChangedListener);
> + myEntitiesTableEditor.setModel(myModel);
> +
> + EOEntitySelectionChangedListener entitySelectionChangedListener
> = new EOEntitySelectionChangedListener();
> +
> myEntityEditor
> .addSelectionChangedListener(entitySelectionChangedListener);
> +
> + myStoredProcedureEditor = new EOArgumentsTableEditor();
> + EOArgumentSelectionChangedListener
> argumentSelectionChangedListener = new
> EOArgumentSelectionChangedListener();
> +
> myStoredProcedureEditor
> .addSelectionChangedListener(argumentSelectionChangedListener);
> +
> + if (myOpeningEntity != null) {
> + setSelectedEntity(myOpeningEntity);
> + setActivePage(getPageNum(EOModelEditor.EOENTITY_PAGE));
> + }
> +
> + } catch (PartInitException e) {
> + ErrorDialog.openError(getSite().getShell(), "Error creating
> editor.", null, e.getStatus());
> + }
> + }
> + }
> +
> +..verride
> + public void dispose() {
> + ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
> +
> + myEntitiesChangeListener.stop();
> + myStoredProceduresChangeListener.stop();
> + myDatabaseConfigsChangeListener.stop();
> + myFetchSpecsChangeListener.stop();
> + myEntityIndexesChangeListener.stop();
> +
> + super.dispose();
> +
> + switchFromEntityModelerPerspective();
> + }
> +
> +..verride
> + public void doSave(final IProgressMonitor monitor) {
> + // if (!myModel.isEditing()) {
> + //
> ErrorUtils.openErrorDialog(Display.getDefault().getActiveShell(),
> + // "You cannot save this model because it is read-only.");
> + // return;
> + // }
> + showBusy(true);
> + try {
> + IEditorInput input = getEditorInput();
> + if (input != null && myModel != null) {
> + Set<EOModelVerificationFailure> failures = new
> HashSet<EOModelVerificationFailure>();
> +
> + for (EOModel model : myModel.getModelGroup().getModels()) {
> + if (model.isDirty()) {
> + monitor.beginTask("Checking " + model.getName() + " ...",
> IProgressMonitor.UNKNOWN);
> + try {
> + model.verify(failures);
> + if (!model.canSave()) {
> + failures.add(new EOModelVerificationFailure(model, "You
> modified the model '" + model.getName() + "', but you are not able
> to save it to '" + model.getIndexURL() + "'.", false));
> + }
> + } finally {
> + monitor.done();
> + }
> + }
> + }
> +
> + handleModelErrors(failures, false);
> +
> + for (EOModel model : myModel.getModelGroup().getModels()) {
> + if (model.isDirty() && model.canSave()) {
> + monitor.beginTask("Saving " + model.getName() + " ...",
> IProgressMonitor.UNKNOWN);
> + try {
> + model.save();
> +
> + IFile eclipseIndexFile =
> EclipseFileUtils.getEclipseFile(myModel.getIndexURL());
> + if (eclipseIndexFile != null) {
> +
> eclipseIndexFile
> .getParent().getParent().refreshLocal(IResource.DEPTH_INFINITE,
> monitor);
> + }
> + } finally {
> + monitor.done();
> + }
> + }
> + }
> + }
> + } catch (Throwable t) {
> +
> ErrorUtils.openErrorDialog(Display.getDefault().getActiveShell(), t);
> + } finally {
> + showBusy(false);
> + }
> + }
> +
> +..verride
> + public void doSaveAs() {
> + doSave(null);
> + }
> +
> + protected void doubleClickedObjectInOutline(final Object _obj) {
> + if (_obj instanceof EOEntity) {
> + setActivePage(getPageNum(EOModelEditor.EOENTITY_PAGE));
> + } else if (_obj instanceof EOStoredProcedure) {
> + setActivePage(getPageNum(EOModelEditor.EOSTOREDPROCEDURE_PAGE));
> + }
> + }
> +
> + protected void editorDirtyStateChanged() {
> + firePropertyChange(IEditorPart.PROP_DIRTY);
> + }
> +
> + protected void fireSelectionChanged(final ISelection _selection) {
> + // Hack: When the selection changes, update the focus on the
> outline
> + // view or
> + // the properties view can sometimes not refresh properly -- It's
> really
> + // silly
> + // and I don't know why it's happening.
> + getContentOutlinePage().setFocus();
> + Object[] selectionChangedListeners =
> mySelectionChangedListeners.getListeners();
> + SelectionChangedEvent selectionChangedEvent = new
> SelectionChangedEvent(this, _selection);
> + for (int listenerNum = 0; listenerNum <
> selectionChangedListeners.length; listenerNum++) {
> + ISelectionChangedListener listener = (ISelectionChangedListener)
> selectionChangedListeners[listenerNum];
> + listener.selectionChanged(selectionChangedEvent);
> + }
> + }
> +
> +..verride
> + public Object getAdapter(final Class _adapterClass) {
> + Object adapter;
> + if (_adapterClass == IPropertySheetPage.class) {
> + adapter = new TabbedPropertySheetPage(this);
> + } else if (_adapterClass == IContentOutlinePage.class) {
> + IContentOutlinePage outlinePage = getContentOutlinePage();
> + adapter = outlinePage;
> + } else {
> + adapter = super.getAdapter(_adapterClass);
> + }
> + return adapter;
> + }
> +
> + public EOModelContentOutlinePage getContentOutlinePage() {
> + if (myContentOutlinePage == null) {
> + myContentOutlinePage = new EOModelContentOutlinePage(this);
> + myContentOutlinePage.addSelectionChangedListener(new
> EOModelContentSelectionChangedListener());
> + }
> + return myContentOutlinePage;
> + }
> +
> + public String getContributorId() {
> + return getSite().getId();
> + }
> +
> + public EOEntitiesTableEditor getEntitiesTableEditor() {
> + return myEntitiesTableEditor;
> + }
> +
> + public EOEntityEditor getEntityEditor() {
> + return myEntityEditor;
> + }
> +
> + public EOModel getModel() {
> + return myModel;
> + }
> +
> + protected int getPageNum(final IEditorPart _editorPart) {
> + int matchingPageNum = -1;
> + int pageCount = getPageCount();
> + for (int pageNum = 0; matchingPageNum == -1 && pageNum <
> pageCount; pageNum++) {
> + IEditorPart editorPart = getEditor(pageNum);
> + if (editorPart == _editorPart) {
> + matchingPageNum = pageNum;
> + }
> + }
> + return matchingPageNum;
> + }
> +
> + protected int getPageNum(final String _pageType) {
> + int pageNum;
> + if (_pageType == EOModelEditor.EOENTITY_PAGE) {
> + pageNum = getPageNum(myEntityEditor);
> + } else if (_pageType == EOModelEditor.EOMODEL_PAGE) {
> + pageNum = getPageNum(myEntitiesTableEditor);
> + } else if (_pageType == EOModelEditor.EOSTOREDPROCEDURE_PAGE) {
> + pageNum = getPageNum(myStoredProcedureEditor);
> + } else {
> + pageNum = -1;
> + }
> + return pageNum;
> + }
> +
> + public EOEntity getSelectedEntity() {
> + return mySelectedEntity;
> + }
> +
> + public EOStoredProcedure getSelectedStoredProcedure() {
> + return mySelectedStoredProcedure;
> + }
> +
> + public ISelection getSelection() {
> + return mySelection;
> + }
> +
> + public EOArgumentsTableEditor getStoredProcedureEditor() {
> + return myStoredProcedureEditor;
> + }
> +
> + public IUndoContext getUndoContext() {
> + return new EOModelEditorUndoContext();
> + }
> +
> + protected void handleModelErrors(final
> Set<EOModelVerificationFailure> failures, final boolean forceOpen) {
> if (myModel != null) {
> try {
> if
> (Activator
> .getDefault
> ().getPreferenceStore
> ().getBoolean(PreferenceConstants.SHOW_ERRORS_IN_PROBLEMS_VIEW_KEY)) {
> final EOModel editingModel = myModel;
> IWorkspaceRunnable body = new IWorkspaceRunnable() {
> - public void run(IProgressMonitor monitor) throws
> CoreException {
> + public void run(final IProgressMonitor monitor) throws
> CoreException {
> for (EOModel model :
> editingModel.getModelGroup().getModels()) {
> try {
> IFile indexFile =
> EclipseFileUtils.getEclipseIndexFile(model);
>.. -749,26 +879,48 @@
> }
> }
>
> - protected void updatePartName() {
> - String partName;
> +..verride
> + public void init(final IEditorSite site, final IEditorInput
> editorInput) throws PartInitException {
> + try {
> + switchToEntityModelerPerspective();
> + super.init(site, editorInput);
> +
> + LoadEOModelWorkspaceJob loadModelJob = new
> LoadEOModelWorkspaceJob(this, editorInput);
> + loadModelJob.schedule();
> + } catch (WorkbenchException e) {
> + e.printStackTrace();
> + }
> + }
> +
> +..verride
> + public boolean isDirty() {
> + boolean dirty = false;
> if (myModel != null) {
> - partName = myModel.getName();
> - } else {
> - partName = Messages.getString("EOModelEditor.partName");
> + if (myModel.isDirty()) {
> + dirty = true;
> + } else if (myModel.getModelGroup() != null) {
> + dirty = myModel.getModelGroup().isDirty();
> + }
> }
> - setPartName(partName);
> + return dirty;
> }
>
> +..verride
> public boolean isSaveAsAllowed() {
> return false;
> }
>
> - protected void pageChange(int _newPageIndex) {
> +..verride
> + protected void pageChange(final int _newPageIndex) {
> super.pageChange(_newPageIndex);
> ISelectionProvider selectionProvider = (ISelectionProvider)
> getEditor(_newPageIndex);
> getSite().setSelectionProvider(selectionProvider);
> }
>
> + public void removeSelectionChangedListener(final
> ISelectionChangedListener _listener) {
> + mySelectionChangedListeners.remove(_listener);
> + }
> +
> public void resourceChanged(final IResourceChangeEvent _event) {
> if (_event.getType() == IResourceChangeEvent.PRE_CLOSE) {
> final IURIEditorInput input = (IURIEditorInput) getEditorInput();
>.. -787,33 +939,138 @@
> }
> }
>
> - public EOEntitiesTableEditor getEntitiesTableEditor() {
> - return myEntitiesTableEditor;
> + public void revert() {
> + boolean confirmed =
> MessageDialog.openConfirm(Display.getDefault().getActiveShell(),
> Messages.getString("EOModelEditor.revertTitle"),
> Messages.getString("EOModelEditor.revertMessage"));
> + if (confirmed) {
> + try {
> + init((IEditorSite) getSite(), getEditorInput());
> + } catch (PartInitException e) {
> + e.printStackTrace();
> + }
> + }
> }
>
> - public EOEntityEditor getEntityEditor() {
> - return myEntityEditor;
> +..verride
> + public void setActivePage(final int _pageIndex) {
> + if (_pageIndex != getActivePage()) {
> + super.setActivePage(_pageIndex);
> + }
> }
>
> - public EOArgumentsTableEditor getStoredProcedureEditor() {
> - return myStoredProcedureEditor;
> + protected void setEntityPageVisible(final boolean
> _entityPageVisible) {
> + try {
> + if (_entityPageVisible) {
> + if (!myEntityPageVisible) {
> + addPage(myEntityEditor, getEditorInput());
> + }
> + String entityName = mySelectedEntity.getName();
> + if (entityName == null) {
> + entityName = "?";
> + }
> + setPageText(getPageNum(EOModelEditor.EOENTITY_PAGE), entityName);
> + } else if (myEntityPageVisible) {
> + removePage(getPageNum(EOModelEditor.EOENTITY_PAGE));
> + }
> + myEntityPageVisible = _entityPageVisible;
> + } catch (PartInitException e) {
> + ErrorDialog.openError(getSite().getShell(), "Error creating
> editor.", null, e.getStatus());
> + }
> }
>
> - public void setActivePage(int _pageIndex) {
> - if (_pageIndex != getActivePage()) {
> - super.setActivePage(_pageIndex);
> +..verride
> + public void setFocus() {
> + super.setFocus();
> + // MS: I'm not sure the right way to do this, but without
> + // this call, selecting a relationship in the EOModelEditor
> + // before ever activing the outline would not cause the
> + // property view to update.
> + getSite().setSelectionProvider(this);
> +
> + // MS: If an Entity Modeler editor receives focus, and there is
> + // more than one editor in the perspective, we want to switch
> + // to Entity Modeler perspective. The "more than one editor"
> + // restriction is in place, because if you only have an
> + // Entity Modeler editor in the perspective, you won't be
> + // able to ever switch perspectives to temporarily get access
> + // to package explorer, for instance, because it will keep
> + // forcing you back. This MIGHT actually be the correct
> + // behavior, but it seemed really aggressive.
> + if
> (Activator
> .getDefault
> ().getPreferenceStore
> ().getBoolean(PreferenceConstants.CHANGE_PERSPECTIVES_KEY)) {
> + boolean shouldSwitchToEntityModeler = false;
> + IWorkbench workbench = Activator.getDefault().getWorkbench();
> + IWorkbenchWindow activeWindow =
> workbench.getActiveWorkbenchWindow();
> + if (activeWindow != null) {
> + if (activeWindow != null) {
> + IWorkbenchPage workbenchPage = activeWindow.getActivePage();
> + if (workbenchPage != null) {
> + IEditorReference[] editorReferences =
> workbenchPage.getEditorReferences();
> + if (editorReferences.length > 1) {
> + shouldSwitchToEntityModeler = true;
> + }
> + }
> + }
> + }
> + if (shouldSwitchToEntityModeler) {
> + switchToEntityModelerPerspective();
> + }
> }
> }
>
> - public ISelection getSelection() {
> - return mySelection;
> + public void setSelectedEntity(final EOEntity _selectedEntity) {
> + if (!ComparisonUtils.equals(mySelectedEntity, _selectedEntity)) {
> + if (mySelectedEntity != null) {
> +
> mySelectedEntity.removePropertyChangeListener(EOEntity.ATTRIBUTES,
> myAttributeAndRelationshipListener);
> +
> mySelectedEntity
> .removePropertyChangeListener(EOEntity.RELATIONSHIPS,
> myAttributeAndRelationshipListener);
> + }
> + mySelectedEntity = _selectedEntity;
> + if (mySelectedEntity != null) {
> + mySelectedEntity.addPropertyChangeListener(EOEntity.ATTRIBUTES,
> myAttributeAndRelationshipListener);
> +
> mySelectedEntity.addPropertyChangeListener(EOEntity.RELATIONSHIPS,
> myAttributeAndRelationshipListener);
> + }
> + if (_selectedEntity == null) {
> + setEntityPageVisible(false);
> + } else {
> + setEntityPageVisible(true);
> + }
> + myEntitiesTableEditor.setSelectedEntity(_selectedEntity);
> + myEntityEditor.setEntity(_selectedEntity);
> + // Fix a problem where the entity properties view does not refresh
> + // This is a hack, but if we steal focus onto the outline, it DOES
> + // refresh
> + updatePartName();
> + }
> + if (_selectedEntity != null) {
> + setSelectedStoredProcedure(null);
> + }
> }
>
> - public void setSelection(ISelection _selection) {
> + public void setSelectedStoredProcedure(final EOStoredProcedure
> _selectedStoredProcedure) {
> + if (!ComparisonUtils.equals(mySelectedStoredProcedure,
> _selectedStoredProcedure)) {
> + if (mySelectedStoredProcedure != null) {
> +
> mySelectedStoredProcedure
> .removePropertyChangeListener(EOStoredProcedure.ARGUMENTS,
> myArgumentListener);
> + }
> + mySelectedStoredProcedure = _selectedStoredProcedure;
> + if (mySelectedStoredProcedure != null) {
> +
> mySelectedStoredProcedure
> .addPropertyChangeListener(EOStoredProcedure.ARGUMENTS,
> myArgumentListener);
> + }
> + if (_selectedStoredProcedure == null) {
> + setStoredProcedurePageVisible(false);
> + } else {
> + setStoredProcedurePageVisible(true);
> + }
> +
> myStoredProcedureEditor.setStoredProcedure(_selectedStoredProcedure);
> + updatePartName();
> + }
> + if (_selectedStoredProcedure != null) {
> + setSelectedEntity(null);
> + }
> + }
> +
> + public void setSelection(final ISelection _selection) {
> setSelection(_selection, true);
> }
>
> - public synchronized void setSelection(ISelection _selection,
> boolean _updateOutline) {
> + public synchronized void setSelection(final ISelection _selection,
> final boolean _updateOutline) {
> // MS: it's really easy to setup a selection loop with so many
> // interrelated components. In reality, we only want the top
> selection
> // to count, and
>.. -886,21 +1143,35 @@
> }
> }
>
> - public void addSelectionChangedListener(ISelectionChangedListener
> _listener) {
> - mySelectionChangedListeners.add(_listener);
> + protected void setStoredProcedurePageVisible(final boolean
> _storedProcedurePageVisible) {
> + try {
> + if (_storedProcedurePageVisible) {
> + if (!myStoredProcedurePageVisible) {
> + addPage(myStoredProcedureEditor, getEditorInput());
> + }
> + String storedProcedureName = mySelectedStoredProcedure.getName();
> + if (storedProcedureName == null) {
> + storedProcedureName = "?";
> + }
> + setPageText(getPageNum(EOModelEditor.EOSTOREDPROCEDURE_PAGE),
> storedProcedureName);
> + } else if (myStoredProcedurePageVisible) {
> + removePage(getPageNum(EOModelEditor.EOSTOREDPROCEDURE_PAGE));
> + }
> + myStoredProcedurePageVisible = _storedProcedurePageVisible;
> + } catch (PartInitException e) {
> + ErrorDialog.openError(getSite().getShell(), "Error creating
> editor.", null, e.getStatus());
> + }
> }
>
> - public void
> removeSelectionChangedListener(ISelectionChangedListener _listener) {
> - mySelectionChangedListeners.remove(_listener);
> - }
> -
> /**
> * Called when Entity Modeler should switch from Entity Modeler
> Perspective
> * back to WOLips perspective.
> */
> public void switchFromEntityModelerPerspective() {
> - // MS: If "Open in New Window" is selected, then we want to watch
> for the case where
> - // you were in Entity Modeler and then close the editor, which
> also close the new window,
> + // MS: If "Open in New Window" is selected, then we want to watch
> for
> + // the case where
> + // you were in Entity Modeler and then close the editor, which also
> + // close the new window,
> // so we don't leave you sitting in a blank window.
> boolean closedWindow = false;
> if
> (Activator
> .getDefault
> ().getPreferenceStore
> ().getBoolean(PreferenceConstants.OPEN_IN_WINDOW_KEY)) {
>.. -916,7 +1187,8 @@
> }
> }
>
> - // MS: If the window didn't need to close, then we want to switch
> perspectives on your current
> + // MS: If the window didn't need to close, then we want to switch
> + // perspectives on your current
> // window from Entity Modeler over to the WOLips perspective.
> if (!closedWindow &&
> Activator
> .getDefault
> ().getPreferenceStore
> ().getBoolean(PreferenceConstants.CHANGE_PERSPECTIVES_KEY)) {
> try {
>.. -965,255 +1237,13 @@
> }
> }
>
> - public void setFocus() {
> - super.setFocus();
> - // MS: I'm not sure the right way to do this, but without
> - // this call, selecting a relationship in the EOModelEditor
> - // before ever activing the outline would not cause the
> - // property view to update.
> - getSite().setSelectionProvider(this);
> -
> - // MS: If an Entity Modeler editor receives focus, and there is
> - // more than one editor in the perspective, we want to switch
> - // to Entity Modeler perspective. The "more than one editor"
> - // restriction is in place, because if you only have an
> - // Entity Modeler editor in the perspective, you won't be
> - // able to ever switch perspectives to temporarily get access
> - // to package explorer, for instance, because it will keep
> - // forcing you back. This MIGHT actually be the correct
> - // behavior, but it seemed really aggressive.
> - if
> (Activator
> .getDefault
> ().getPreferenceStore
> ().getBoolean(PreferenceConstants.CHANGE_PERSPECTIVES_KEY)) {
> - boolean shouldSwitchToEntityModeler = false;
> - IWorkbench workbench = Activator.getDefault().getWorkbench();
> - IWorkbenchWindow activeWindow =
> workbench.getActiveWorkbenchWindow();
> - if (activeWindow != null) {
> - if (activeWindow != null) {
> - IWorkbenchPage workbenchPage = activeWindow.getActivePage();
> - if (workbenchPage != null) {
> - IEditorReference[] editorReferences =
> workbenchPage.getEditorReferences();
> - if (editorReferences.length > 1) {
> - shouldSwitchToEntityModeler = true;
> - }
> - }
> - }
> - }
> - if (shouldSwitchToEntityModeler) {
> - switchToEntityModelerPerspective();
> - }
> + protected void updatePartName() {
> + String partName;
> + if (myModel != null) {
> + partName = myModel.getName();
> + } else {
> + partName = Messages.getString("EOModelEditor.partName");
> }
> + setPartName(partName);
> }
> -
> - protected void fireSelectionChanged(ISelection _selection) {
> - // Hack: When the selection changes, update the focus on the
> outline view or
> - // the properties view can sometimes not refresh properly -- It's
> really silly
> - // and I don't know why it's happening.
> - getContentOutlinePage().setFocus();
> - Object[] selectionChangedListeners =
> mySelectionChangedListeners.getListeners();
> - SelectionChangedEvent selectionChangedEvent = new
> SelectionChangedEvent(this, _selection);
> - for (int listenerNum = 0; listenerNum <
> selectionChangedListeners.length; listenerNum++) {
> - ISelectionChangedListener listener = (ISelectionChangedListener)
> selectionChangedListeners[listenerNum];
> - listener.selectionChanged(selectionChangedEvent);
> - }
> - }
> -
> - protected void editorDirtyStateChanged() {
> - firePropertyChange(IEditorPart.PROP_DIRTY);
> - }
> -
> - protected void doubleClickedObjectInOutline(Object _obj) {
> - if (_obj instanceof EOEntity) {
> - setActivePage(getPageNum(EOModelEditor.EOENTITY_PAGE));
> - } else if (_obj instanceof EOStoredProcedure) {
> - setActivePage(getPageNum(EOModelEditor.EOSTOREDPROCEDURE_PAGE));
> - }
> - }
> -
> - protected class EOModelContentSelectionChangedListener implements
> ISelectionChangedListener {
> - private Object mySelectedObject;
> -
> - public void selectionChanged(SelectionChangedEvent _event) {
> - IStructuredSelection selection = (IStructuredSelection)
> _event.getSelection();
> - Object selectedObject = selection.getFirstElement();
> - setSelection(selection, false);
> - if (myContentOutlinePage.isSelectedWithOutline()) {
> - EOModelEditor.this.doubleClickedObjectInOutline(selectedObject);
> - } else {
> - if (mySelectedObject == null) {
> - mySelectedObject = selectedObject;
> - } else if (mySelectedObject == selectedObject) {
> - EOModelEditor.this.doubleClickedObjectInOutline(selectedObject);
> - mySelectedObject = null;
> - } else {
> - mySelectedObject = selectedObject;
> - }
> - }
> - }
> - }
> -
> - protected class EOModelSelectionChangedListener implements
> ISelectionChangedListener {
> - public void selectionChanged(SelectionChangedEvent _event) {
> - IStructuredSelection selection = (IStructuredSelection)
> _event.getSelection();
> - setSelection(selection);
> - }
> - }
> -
> - protected class EOEntitySelectionChangedListener implements
> ISelectionChangedListener {
> - public void selectionChanged(SelectionChangedEvent _event) {
> - IStructuredSelection selection = (IStructuredSelection)
> _event.getSelection();
> - setSelection(selection);
> - }
> - }
> -
> - protected class EOArgumentSelectionChangedListener implements
> ISelectionChangedListener {
> - public void selectionChanged(SelectionChangedEvent _event) {
> - IStructuredSelection selection = (IStructuredSelection)
> _event.getSelection();
> - setSelection(selection);
> - }
> - }
> -
> - protected class DirtyModelListener implements
> PropertyChangeListener {
> - public void propertyChange(PropertyChangeEvent _event) {
> - String propertyName = _event.getPropertyName();
> - if (EOModel.DIRTY.equals(propertyName)) {
> - EOModelEditor.this.editorDirtyStateChanged();
> - }
> - }
> - }
> -
> - protected class EntitiesChangeRefresher extends
> AbstractAddRemoveChangeRefresher<EOEntity> {
> - public EntitiesChangeRefresher() {
> - super("EntitiesChange");
> - }
> -
> - public void changeSelection(ISelection selection) {
> - EOModelEditor.this.setSelection(selection);
> -
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOENTITY_PAGE));
> - }
> -
> - protected void objectsAdded(List<EOEntity> _addedObjects) {
> - // DO NOTHING
> - }
> -
> - protected void objectsRemoved(List<EOEntity> _removedObjects) {
> - EOModelEditor.this.setSelection(new
> StructuredSelection(EOModelEditor.this.getModel()));
> -
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOMODEL_PAGE));
> - }
> - }
> -
> - protected class FetchSpecsChangeRefresher extends
> AbstractAddRemoveChangeRefresher<EOFetchSpecification> {
> - public FetchSpecsChangeRefresher() {
> - super("FetchSpecsChange");
> - }
> -
> - public void changeSelection(ISelection selection) {
> - EOModelEditor.this.setSelection(selection);
> -
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOENTITY_PAGE));
> - }
> -
> - protected void objectsAdded(List<EOFetchSpecification>
> _addedObjects) {
> - // DO NOTHING
> - }
> -
> - protected void objectsRemoved(List<EOFetchSpecification>
> _removedObjects) {
> - EOModelEditor.this.setSelection(new
> StructuredSelection(EOModelEditor.this.getModel()));
> -
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOMODEL_PAGE));
> - }
> - }
> -
> - protected class EntityIndexesChangeRefresher extends
> AbstractAddRemoveChangeRefresher<EOEntityIndex> {
> - public EntityIndexesChangeRefresher() {
> - super("EntityIndexesChange");
> - }
> -
> - public void changeSelection(ISelection selection) {
> - EOModelEditor.this.setSelection(selection);
> -
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOENTITY_PAGE));
> - }
> -
> - protected void objectsAdded(List<EOEntityIndex> _addedObjects) {
> - // DO NOTHING
> - }
> -
> - protected void objectsRemoved(List<EOEntityIndex>
> _removedObjects) {
> - EOModelEditor.this.setSelection(new
> StructuredSelection(EOModelEditor.this.getModel()));
> -
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOMODEL_PAGE));
> - }
> - }
> -
> - protected class StoredProceduresChangeRefresher extends
> AbstractAddRemoveChangeRefresher<EOStoredProcedure> {
> - public StoredProceduresChangeRefresher() {
> - super("StoredProceduresChange");
> - }
> -
> - public void changeSelection(ISelection selection) {
> - EOModelEditor.this.setSelection(selection);
> -
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOSTOREDPROCEDURE_PAGE));
> - }
> -
> - protected void objectsAdded(List<EOStoredProcedure>
> _addedObjects) {
> - // DO NOTHING
> - }
> -
> - protected void objectsRemoved(List<EOStoredProcedure>
> _removedObjects) {
> - EOModelEditor.this.setSelection(new
> StructuredSelection(EOModelEditor.this.getModel()));
> -
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOMODEL_PAGE));
> - }
> - }
> -
> - protected class DatabaseConfigsChangeRefresher extends
> AbstractAddRemoveChangeRefresher<EODatabaseConfig> {
> - public DatabaseConfigsChangeRefresher() {
> - super("DatabaseConfigsChange");
> - }
> -
> - public void changeSelection(ISelection selection) {
> - EOModelEditor.this.setSelection(selection);
> - }
> -
> - protected void objectsAdded(List<EODatabaseConfig> _addedObjects) {
> - // DO NOTHING
> - }
> -
> - protected void objectsRemoved(List<EODatabaseConfig>
> _removedObjects) {
> - EOModelEditor.this.setSelection(new
> StructuredSelection(EOModelEditor.this.getModel()));
> -
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOMODEL_PAGE));
> - }
> - }
> -
> - protected class ArgumentDeletedRefresher extends
> AbstractAddRemoveChangeRefresher<EOArgument> {
> - public ArgumentDeletedRefresher() {
> - super("ArgumentDeleted");
> - }
> -
> - public void changeSelection(ISelection selection) {
> - EOModelEditor.this.setSelection(selection);
> - }
> -
> - protected void objectsAdded(List<EOArgument> _addedObjects) {
> - // DO NOTHING
> - }
> -
> - protected void objectsRemoved(List<EOArgument> _removedObjects) {
> - EOModelEditor.this.setSelection(new
> StructuredSelection(EOModelEditor.this.getSelectedStoredProcedure()));
> -
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOSTOREDPROCEDURE_PAGE));
> - }
> - }
> -
> - protected class AttributeAndRelationshipDeletedRefresher extends
> AbstractAddRemoveChangeRefresher<IEOAttribute> {
> - public AttributeAndRelationshipDeletedRefresher() {
> - super("AttributeAndRelationshipDeleted");
> - }
> -
> - public void changeSelection(ISelection selection) {
> - EOModelEditor.this.setSelection(selection);
> - }
> -
> - protected void objectsAdded(List<IEOAttribute> _addedObjects) {
> - // DO NOTHING
> - }
> -
> - protected void objectsRemoved(List<IEOAttribute> _removedObjects) {
> - EOModelEditor.this.setSelection(new
> StructuredSelection(EOModelEditor.this.getSelectedEntity()));
> -
> EOModelEditor
> .this.setActivePage(getPageNum(EOModelEditor.EOENTITY_PAGE));
> - }
> - }
> }
> \ No newline at end of file
>
This archive was generated by hypermail 2.0.0 : Wed Jan 28 2009 - 09:45:15 EST