Hi Mike,
Sorry for that. I think it is a good idea to rollback the change and do
it again without the code format. I can do it if you want.
I've changed only two lines:
IPath jarFile =
(IPath) packageFragmentRootClass.getMethod("getPath").invoke(root);
indexURL = new URI("jar:" +
jarFile.toFile().toURL() + "!" + jarEntryPath.toPortableString());
I called the getPath method on JarPackageFragmentRoot object instead of
getUnderlyingResource. The latter returns 'null' in my environment.
I just added an external jar to my project (it appeared in the
Referenced Libraries library).
Cheers,
Henrique
Mike Schrag wrote:
> 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 - 10:08:30 EST