Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » EMF » TableViewer binding
TableViewer binding [message #665929] Mon, 18 April 2011 08:22 Go to next message
Alex Mising name is currently offline Alex Mising nameFriend
Messages: 61
Registered: February 2011
Member
Hello all. I have problem with tableviewer binding to generated editmodel:
adapterFactory = new ComposedAdapterFactory();
		adapterFactory.addAdapterFactory(new WtpdbItemProviderAdapterFactory());
		adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());

resource = Activator.getDefault().getResource();
		TableViewer tableViewer = new TableViewer(parent, SWT.BORDER | SWT.FULL_SELECTION);
		table = tableViewer.getTable();
		//WtpdbItemProviderAdapterFactory adapterFactory = new WtpdbItemProviderAdapterFactory();
		AdapterFactoryContentProvider cp =new AdapterFactoryContentProvider(adapterFactory);
		tableViewer.setContentProvider(cp);
		tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(adapterFactory));
		TableColumn objectColumn = new TableColumn(table, SWT.NONE);
		TableLayout layout = new TableLayout();
		table.setLayout(layout);
		layout.addColumnData(new ColumnWeightData(3, 100, true));
		//objectColumn.setText(getString("_UI_ObjectColumn_label"));
		objectColumn.setResizable(true);
		tableViewer.setColumnProperties(new String [] {"a", "b"});
		IEMFListProperty reports = EMFProperties.list(WtpdbPackage.Literals.WTPBASE__GROUPS);
		tableViewer.setInput(reports.observe(resource.getWtpBase()));


my tableViewer is empty? Where can be problem?
Re: TableViewer binding [message #665933 is a reply to message #665929] Mon, 18 April 2011 08:28 Go to previous messageGo to next message
Thomas Schindl is currently offline Thomas SchindlFriend
Messages: 6651
Registered: July 2009
Senior Member
Am 18.04.11 10:22, schrieb Alex:
> Hello all. I have problem with tableviewer binding to generated editmodel:
>
> adapterFactory = new ComposedAdapterFactory();
> adapterFactory.addAdapterFactory(new
> WtpdbItemProviderAdapterFactory());
> adapterFactory.addAdapterFactory(new
> ResourceItemProviderAdapterFactory());
>
>
> resource = Activator.getDefault().getResource();
> TableViewer tableViewer = new TableViewer(parent, SWT.BORDER |
> SWT.FULL_SELECTION);
> table = tableViewer.getTable();
> //WtpdbItemProviderAdapterFactory adapterFactory = new
> WtpdbItemProviderAdapterFactory();
> AdapterFactoryContentProvider cp =new
> AdapterFactoryContentProvider(adapterFactory);
> tableViewer.setContentProvider(cp);
> tableViewer.setLabelProvider(new
> AdapterFactoryLabelProvider(adapterFactory));
> TableColumn objectColumn = new TableColumn(table, SWT.NONE);
> TableLayout layout = new TableLayout();
> table.setLayout(layout);
> layout.addColumnData(new ColumnWeightData(3, 100, true));
> //objectColumn.setText(getString("_UI_ObjectColumn_label"));
> objectColumn.setResizable(true);
> tableViewer.setColumnProperties(new String [] {"a", "b"});
> IEMFListProperty reports =
> EMFProperties.list(WtpdbPackage.Literals.WTPBASE__GROUPS);
> tableViewer.setInput(reports.observe(resource.getWtpBase())) ;
>
>
> my tableViewer is empty? Where can be problem?

I would not pass an IObservableList but simply
resource.getWtBase().getGroups(). This is just a guess, I've never
worked with the generated EMF-UI code

Tom
Re: TableViewer binding [message #665934 is a reply to message #665933] Mon, 18 April 2011 08:48 Go to previous messageGo to next message
Alex Mising name is currently offline Alex Mising nameFriend
Messages: 61
Registered: February 2011
Member
No Tom, that's not working.
Re: TableViewer binding [message #666023 is a reply to message #665929] Mon, 18 April 2011 16:39 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 33142
Registered: July 2009
Senior Member
Alex,

Does the generated editor's table view work?


Alex wrote:
> Hello all. I have problem with tableviewer binding to generated
> editmodel:
>
> adapterFactory = new ComposedAdapterFactory();
> adapterFactory.addAdapterFactory(new
> WtpdbItemProviderAdapterFactory());
> adapterFactory.addAdapterFactory(new
> ResourceItemProviderAdapterFactory());
>
>
> resource = Activator.getDefault().getResource();
> TableViewer tableViewer = new TableViewer(parent, SWT.BORDER |
> SWT.FULL_SELECTION);
> table = tableViewer.getTable();
> //WtpdbItemProviderAdapterFactory adapterFactory = new
> WtpdbItemProviderAdapterFactory();
> AdapterFactoryContentProvider cp =new
> AdapterFactoryContentProvider(adapterFactory);
> tableViewer.setContentProvider(cp);
> tableViewer.setLabelProvider(new
> AdapterFactoryLabelProvider(adapterFactory));
> TableColumn objectColumn = new TableColumn(table, SWT.NONE);
> TableLayout layout = new TableLayout();
> table.setLayout(layout);
> layout.addColumnData(new ColumnWeightData(3, 100, true));
> //objectColumn.setText(getString("_UI_ObjectColumn_label"));
> objectColumn.setResizable(true);
> tableViewer.setColumnProperties(new String [] {"a", "b"});
> IEMFListProperty reports =
> EMFProperties.list(WtpdbPackage.Literals.WTPBASE__GROUPS);
> tableViewer.setInput(reports.observe(resource.getWtpBase())) ;
>
>
> my tableViewer is empty? Where can be problem?


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: TableViewer binding [message #666088 is a reply to message #666023] Tue, 19 April 2011 04:40 Go to previous messageGo to next message
Alex Mising name is currently offline Alex Mising nameFriend
Messages: 61
Registered: February 2011
Member
No Message Body

[Updated on: Tue, 19 April 2011 11:14]

Report message to a moderator

Re: TableViewer binding [message #666152 is a reply to message #666023] Tue, 19 April 2011 11:14 Go to previous messageGo to next message
Alex Mising name is currently offline Alex Mising nameFriend
Messages: 61
Registered: February 2011
Member
Yes Ed, i founded this helpful link:
http://wiki.eclipse.org/Teneo/Hibernate/Editor_Tutorial
And now generated editor work's good. But still i can't to get working tableviewer.

[Updated on: Tue, 19 April 2011 12:49]

Report message to a moderator

Re: TableViewer binding [message #666248 is a reply to message #666152] Tue, 19 April 2011 15:07 Go to previous messageGo to next message
Alex Mising name is currently offline Alex Mising nameFriend
Messages: 61
Registered: February 2011
Member
Ed, finally i have figured with TableViewer: problem was with setInput method:
ItemProvider provider = new ItemProvider(resource.getWtBase().getGroups());
viewer.setInput(provider);

Is this a good approach?
Re: TableViewer binding [message #666253 is a reply to message #666248] Tue, 19 April 2011 15:49 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 33142
Registered: July 2009
Senior Member
Alex,

Yes, that's a reasonable approach. Can getWtBase() groups change over
time? Why doesn't setInput(resource.getWtBase()) work. Are "groups"
not configured to be children features?


Alex wrote:
> Ed, finally i have figured with TableViewer: problem was with setInput
> method:
>
> ItemProvider provider = new
> ItemProvider(resource.getWtBase().getGroups());
> viewer.setInput(provider);
>
> Is this a good approach?


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: TableViewer binding [message #666289 is a reply to message #666253] Tue, 19 April 2011 18:48 Go to previous messageGo to next message
Alex Mising name is currently offline Alex Mising nameFriend
Messages: 61
Registered: February 2011
Member
Ed, thank you for reply. Yes, groups changes over time. And resource.getWtBase() working, but returns all children features, but i need only groups. Maybe i'm doing something wrong?
Re: TableViewer binding [message #666294 is a reply to message #666289] Tue, 19 April 2011 19:07 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 33142
Registered: July 2009
Senior Member
Alex,

So you'd be better to create a specialized XyzAdapterFactoryImpl that
creates a specialized WtBaseItemProvider in which you override the
getChildrenFeatures method to just return the groups feature. This way,
as the groups change, the table view will keep in sync with those changes.


Alex wrote:
> Ed, thank you for reply. Yes, groups changes over time. And
> resource.getWtBase() working, but returns all children features, but i
> need only groups. Maybe i'm doing something wrong?


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: TableViewer binding [message #666306 is a reply to message #666294] Tue, 19 April 2011 20:14 Go to previous messageGo to next message
Alex Mising name is currently offline Alex Mising nameFriend
Messages: 61
Registered: February 2011
Member
Ed, can you explain me about class XyzAdapterFactoryImpl, what did you mean?
Re: TableViewer binding [message #666309 is a reply to message #666306] Tue, 19 April 2011 20:16 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 33142
Registered: July 2009
Senior Member
Alex,

The one for your model, i.e., WtpdbItemProviderAdapterFactory. Look at
how it creates adapters for different things and specialize the adapter
that's created for the root object you're setting as input to the view.

Alex wrote:
> Ed, can you explain me about class XyzAdapterFactoryImpl, what did you
> mean?


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: TableViewer binding [message #666357 is a reply to message #666309] Wed, 20 April 2011 06:42 Go to previous messageGo to next message
Alex Mising name is currently offline Alex Mising nameFriend
Messages: 61
Registered: February 2011
Member
Ed, i created class WtpDbGroupItemProviderFactory:
public class WtpDbGroupItemProviderFactory extends WtpdbAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
	/**
	 * This keeps track of the root adapter factory that delegates to this adapter factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected ComposedAdapterFactory parentAdapterFactory;

	/**
	 * This is used to implement {@link org.eclipse.emf.edit.provider.IChangeNotifier}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected IChangeNotifier changeNotifier = new ChangeNotifier();

	/**
	 * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected Collection<Object> supportedTypes = new ArrayList<Object>();

	/**
	 * This constructs an instance.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public WtpDbGroupItemProviderFactory() {
		supportedTypes.add(IEditingDomainItemProvider.class);
		supportedTypes.add(IStructuredItemContentProvider.class);
		supportedTypes.add(ITreeItemContentProvider.class);
		supportedTypes.add(IItemLabelProvider.class);
		supportedTypes.add(IItemPropertySource.class);
	}

	/**
	 * This keeps track of the one adapter used for all {@link wtpdb.P6Group} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected P6GroupItemProvider p6GroupItemProvider;

	/**
	 * This creates an adapter for a {@link wtpdb.P6Group}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createP6GroupAdapter() {
		if (p6GroupItemProvider == null) {
			p6GroupItemProvider = new P6GroupItemProvider(this);
		}

		return p6GroupItemProvider;
	}
	

	/**
	 * This keeps track of the one adapter used for all {@link wtpdb.P6Item} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected P6ItemItemProvider p6ItemItemProvider;

	/**
	 * This creates an adapter for a {@link wtpdb.P6Item}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createP6ItemAdapter() {
		if (p6ItemItemProvider == null) {
			p6ItemItemProvider = new P6ItemItemProvider(this);
		}

		return p6ItemItemProvider;
	}
	
	/**
	 * This keeps track of the one adapter used for all {@link wtpdb.WtpBase} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	

	/**
	 * This keeps track of the one adapter used for all {@link wtpdb.WtpBase} instances.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected WtpBaseGroupItemProvider wtpBaseGroupItemProvider;

	/**
	 * This creates an adapter for a {@link wtpdb.WtpBase}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter createWtpBaseAdapter() {
		if (wtpBaseGroupItemProvider == null) {
			wtpBaseGroupItemProvider = new WtpBaseGroupItemProvider(this);
		}

		return wtpBaseGroupItemProvider;
	}

	/**
	 * This returns the root adapter factory that contains this factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public ComposeableAdapterFactory getRootAdapterFactory() {
		return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory();
	}

	/**
	 * This sets the composed adapter factory that contains this factory.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) {
		this.parentAdapterFactory = parentAdapterFactory;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public boolean isFactoryForType(Object type) {
		return supportedTypes.contains(type) || super.isFactoryForType(type);
	}

	/**
	 * This implementation substitutes the factory itself as the key for the adapter.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Adapter adapt(Notifier notifier, Object type) {
		return super.adapt(notifier, this);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object adapt(Object object, Object type) {
		if (isFactoryForType(type)) {
			Object adapter = super.adapt(object, type);
			if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) {
				return adapter;
			}
		}

		return null;
	}

	/**
	 * This adds a listener.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void addListener(INotifyChangedListener notifyChangedListener) {
		changeNotifier.addListener(notifyChangedListener);
	}

	/**
	 * This removes a listener.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void removeListener(INotifyChangedListener notifyChangedListener) {
		changeNotifier.removeListener(notifyChangedListener);
	}

	/**
	 * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void fireNotifyChanged(Notification notification) {
		changeNotifier.fireNotifyChanged(notification);

		if (parentAdapterFactory != null) {
			parentAdapterFactory.fireNotifyChanged(notification);
		}
	}

	/**
	 * This disposes all of the item providers created by this factory. 
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void dispose() {
		if (p6GroupItemProvider != null) p6GroupItemProvider.dispose();
		if (p6ItemItemProvider != null) p6ItemItemProvider.dispose();
		if (wtpBaseGroupItemProvider != null) wtpBaseGroupItemProvider.dispose();
	}

}

then WtpBaseGroupItemProvider:
public class WtpBaseGroupItemProvider
	extends ItemProviderAdapter
	implements
		IEditingDomainItemProvider,
		IStructuredItemContentProvider,
		ITreeItemContentProvider,
		IItemLabelProvider,
		IItemPropertySource {
	/**
	 * This constructs an instance from a factory and a notifier.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public WtpBaseGroupItemProvider(AdapterFactory adapterFactory) {
		super(adapterFactory);
	}

	/**
	 * This returns the property descriptors for the adapted class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
		if (itemPropertyDescriptors == null) {
			super.getPropertyDescriptors(object);

		}
		return itemPropertyDescriptors;
	}

	/**
	 * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
	 * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
	 * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
		if (childrenFeatures == null) {
			super.getChildrenFeatures(object);
			childrenFeatures.add(WtpdbPackage.Literals.WTP_BASE__GROUPS);
		}
		return childrenFeatures;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EStructuralFeature getChildFeature(Object object, Object child) {
		// Check the type of the specified child object and return the proper feature to use for
		// adding (see {@link AddCommand}) it as a child.

		return super.getChildFeature(object, child);
	}

	/**
	 * This returns WtpBase.gif.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public Object getImage(Object object) {
		return overlayImage(object, getResourceLocator().getImage("full/obj16/WtpBase"));
	}

	/**
	 * This returns the label text for the adapted class.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public String getText(Object object) {
		return getString("_UI_WtpBase_type");
	}

	/**
	 * This handles model notifications by calling {@link #updateChildren} to update any cached
	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public void notifyChanged(Notification notification) {
		updateChildren(notification);

		switch (notification.getFeatureID(WtpBase.class)) {
			case WtpdbPackage.WTP_BASE__GROUPS:
				fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
				return;
		}
		super.notifyChanged(notification);
	}

	/**
	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
	 * that can be created under this object.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
		super.collectNewChildDescriptors(newChildDescriptors, object);

		newChildDescriptors.add
			(createChildParameter
				(WtpdbPackage.Literals.WTP_BASE__GROUPS,
				 WtpdbFactory.eINSTANCE.createP6Group()));
	}

	/**
	 * Return the resource locator for this item provider's resources.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	public ResourceLocator getResourceLocator() {
		return WtpEditPlugin.INSTANCE;
	}

}

and in editor:
WtpDbGroupItemProviderFactory providerFactory = new WtpDbGroupItemProviderFactory();
viewer.setContentProvider(new AdapterFactoryContentProvider(providerFactory));
viewer.setInput(resource.getWtpBase());

Is this normal approach?
Re: TableViewer binding [message #666441 is a reply to message #666357] Wed, 20 April 2011 13:22 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 33142
Registered: July 2009
Senior Member
Alex,

I would have expected to you extend the generated item provider adapter
factory rather than duplicating it. Same goes for the one generated
item provider.


Alex wrote:
> Ed, i created class WtpDbGroupItemProviderFactory:
>
> public class WtpDbGroupItemProviderFactory extends WtpdbAdapterFactory
> implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
> /**
> * This keeps track of the root adapter factory that delegates to
> this adapter factory.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> protected ComposedAdapterFactory parentAdapterFactory;
>
> /**
> * This is used to implement {@link
> org.eclipse.emf.edit.provider.IChangeNotifier}.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> protected IChangeNotifier changeNotifier = new ChangeNotifier();
>
> /**
> * This keeps track of all the supported types checked by {@link
> #isFactoryForType isFactoryForType}.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> protected Collection<Object> supportedTypes = new
> ArrayList<Object>();
>
> /**
> * This constructs an instance.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> public WtpDbGroupItemProviderFactory() {
> supportedTypes.add(IEditingDomainItemProvider.class);
> supportedTypes.add(IStructuredItemContentProvider.class);
> supportedTypes.add(ITreeItemContentProvider.class);
> supportedTypes.add(IItemLabelProvider.class);
> supportedTypes.add(IItemPropertySource.class);
> }
>
> /**
> * This keeps track of the one adapter used for all {@link
> wtpdb.P6Group} instances.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> protected P6GroupItemProvider p6GroupItemProvider;
>
> /**
> * This creates an adapter for a {@link wtpdb.P6Group}.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> @Override
> public Adapter createP6GroupAdapter() {
> if (p6GroupItemProvider == null) {
> p6GroupItemProvider = new P6GroupItemProvider(this);
> }
>
> return p6GroupItemProvider;
> }
>
>
> /**
> * This keeps track of the one adapter used for all {@link
> wtpdb.P6Item} instances.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> protected P6ItemItemProvider p6ItemItemProvider;
>
> /**
> * This creates an adapter for a {@link wtpdb.P6Item}.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> @Override
> public Adapter createP6ItemAdapter() {
> if (p6ItemItemProvider == null) {
> p6ItemItemProvider = new P6ItemItemProvider(this);
> }
>
> return p6ItemItemProvider;
> }
>
> /**
> * This keeps track of the one adapter used for all {@link
> wtpdb.WtpBase} instances.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
>
>
> /**
> * This keeps track of the one adapter used for all {@link
> wtpdb.WtpBase} instances.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> protected WtpBaseGroupItemProvider wtpBaseGroupItemProvider;
>
> /**
> * This creates an adapter for a {@link wtpdb.WtpBase}.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> @Override
> public Adapter createWtpBaseAdapter() {
> if (wtpBaseGroupItemProvider == null) {
> wtpBaseGroupItemProvider = new
> WtpBaseGroupItemProvider(this);
> }
>
> return wtpBaseGroupItemProvider;
> }
>
> /**
> * This returns the root adapter factory that contains this factory.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> public ComposeableAdapterFactory getRootAdapterFactory() {
> return parentAdapterFactory == null ? this :
> parentAdapterFactory.getRootAdapterFactory();
> }
>
> /**
> * This sets the composed adapter factory that contains this factory.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> public void setParentAdapterFactory(ComposedAdapterFactory
> parentAdapterFactory) {
> this.parentAdapterFactory = parentAdapterFactory;
> }
>
> /**
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> @Override
> public boolean isFactoryForType(Object type) {
> return supportedTypes.contains(type) ||
> super.isFactoryForType(type);
> }
>
> /**
> * This implementation substitutes the factory itself as the key
> for the adapter.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> @Override
> public Adapter adapt(Notifier notifier, Object type) {
> return super.adapt(notifier, this);
> }
>
> /**
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> @Override
> public Object adapt(Object object, Object type) {
> if (isFactoryForType(type)) {
> Object adapter = super.adapt(object, type);
> if (!(type instanceof Class<?>) ||
> (((Class<?>)type).isInstance(adapter))) {
> return adapter;
> }
> }
>
> return null;
> }
>
> /**
> * This adds a listener.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> public void addListener(INotifyChangedListener
> notifyChangedListener) {
> changeNotifier.addListener(notifyChangedListener);
> }
>
> /**
> * This removes a listener.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> public void removeListener(INotifyChangedListener
> notifyChangedListener) {
> changeNotifier.removeListener(notifyChangedListener);
> }
>
> /**
> * This delegates to {@link #changeNotifier} and to {@link
> #parentAdapterFactory}.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> public void fireNotifyChanged(Notification notification) {
> changeNotifier.fireNotifyChanged(notification);
>
> if (parentAdapterFactory != null) {
> parentAdapterFactory.fireNotifyChanged(notification);
> }
> }
>
> /**
> * This disposes all of the item providers created by this
> factory. * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> public void dispose() {
> if (p6GroupItemProvider != null) p6GroupItemProvider.dispose();
> if (p6ItemItemProvider != null) p6ItemItemProvider.dispose();
> if (wtpBaseGroupItemProvider != null)
> wtpBaseGroupItemProvider.dispose();
> }
>
> }
>
> then WtpBaseGroupItemProvider:
>
> public class WtpBaseGroupItemProvider
> extends ItemProviderAdapter
> implements
> IEditingDomainItemProvider,
> IStructuredItemContentProvider,
> ITreeItemContentProvider,
> IItemLabelProvider,
> IItemPropertySource {
> /**
> * This constructs an instance from a factory and a notifier.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> public WtpBaseGroupItemProvider(AdapterFactory adapterFactory) {
> super(adapterFactory);
> }
>
> /**
> * This returns the property descriptors for the adapted class.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> @Override
> public List<IItemPropertyDescriptor> getPropertyDescriptors(Object
> object) {
> if (itemPropertyDescriptors == null) {
> super.getPropertyDescriptors(object);
>
> }
> return itemPropertyDescriptors;
> }
>
> /**
> * This specifies how to implement {@link #getChildren} and is
> used to deduce an appropriate feature for an
> * {@link org.eclipse.emf.edit.command.AddCommand}, {@link
> org.eclipse.emf.edit.command.RemoveCommand} or
> * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link
> #createCommand}.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> @Override
> public Collection<? extends EStructuralFeature>
> getChildrenFeatures(Object object) {
> if (childrenFeatures == null) {
> super.getChildrenFeatures(object);
> childrenFeatures.add(WtpdbPackage.Literals.WTP_BASE__GROUPS) ;
> }
> return childrenFeatures;
> }
>
> /**
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> @Override
> protected EStructuralFeature getChildFeature(Object object, Object
> child) {
> // Check the type of the specified child object and return the
> proper feature to use for
> // adding (see {@link AddCommand}) it as a child.
>
> return super.getChildFeature(object, child);
> }
>
> /**
> * This returns WtpBase.gif.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> @Override
> public Object getImage(Object object) {
> return overlayImage(object,
> getResourceLocator().getImage("full/obj16/WtpBase"));
> }
>
> /**
> * This returns the label text for the adapted class.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> @Override
> public String getText(Object object) {
> return getString("_UI_WtpBase_type");
> }
>
> /**
> * This handles model notifications by calling {@link
> #updateChildren} to update any cached
> * children and by creating a viewer notification, which it passes
> to {@link #fireNotifyChanged}.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> @Override
> public void notifyChanged(Notification notification) {
> updateChildren(notification);
>
> switch (notification.getFeatureID(WtpBase.class)) {
> case WtpdbPackage.WTP_BASE__GROUPS:
> fireNotifyChanged(new ViewerNotification(notification,
> notification.getNotifier(), true, false));
> return;
> }
> super.notifyChanged(notification);
> }
>
> /**
> * This adds {@link
> org.eclipse.emf.edit.command.CommandParameter}s describing the children
> * that can be created under this object.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> @Override
> protected void collectNewChildDescriptors(Collection<Object>
> newChildDescriptors, Object object) {
> super.collectNewChildDescriptors(newChildDescriptors, object);
>
> newChildDescriptors.add
> (createChildParameter
> (WtpdbPackage.Literals.WTP_BASE__GROUPS,
> WtpdbFactory.eINSTANCE.createP6Group()));
> }
>
> /**
> * Return the resource locator for this item provider's resources.
> * <!-- begin-user-doc -->
> * <!-- end-user-doc -->
> * @generated
> */
> @Override
> public ResourceLocator getResourceLocator() {
> return WtpEditPlugin.INSTANCE;
> }
>
> }
>
> and in editor:
>
> WtpDbGroupItemProviderFactory providerFactory = new
> WtpDbGroupItemProviderFactory();
> viewer.setContentProvider(new
> AdapterFactoryContentProvider(providerFactory));
> viewer.setInput(resource.getWtpBase());
>
> Is this normal approach?


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: TableViewer binding [message #666471 is a reply to message #666441] Wed, 20 April 2011 14:22 Go to previous messageGo to next message
Alex Mising name is currently offline Alex Mising nameFriend
Messages: 61
Registered: February 2011
Member
Ed, if i extend generated item provider class:
public class WtpBaseGroupItemProvider extends WtpBaseItemProvider {
	/**
	 * This constructs an instance from a factory and a notifier. <!--
	 * begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated NOT
	 */
	public WtpBaseGroupItemProvider(AdapterFactory adapterFactory) {
		super(adapterFactory);
	}

	@Override
	public Collection<? extends EStructuralFeature> getChildrenFeatures(
			Object object) {
		if (childrenFeatures == null) {
			super.getChildrenFeatures(object);
			childrenFeatures.add(WtpdbPackage.Literals.WTP_BASE__GROUPS);
		}
		return childrenFeatures;
	}

}

i'm getting groups 2 times
Re: TableViewer binding [message #666489 is a reply to message #666471] Wed, 20 April 2011 14:54 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 33142
Registered: July 2009
Senior Member
Alex,

I can only keep recommending you consult with your debugger before
consulting with the newsgroup. I'm sure it would reveal that calling
super also adds WTP_BASE__GROUPS, which you don't want.


Alex wrote:
> Ed, if i extend generated item provider class:
>
> public class WtpBaseGroupItemProvider extends WtpBaseItemProvider {
> /**
> * This constructs an instance from a factory and a notifier. <!--
> * begin-user-doc --> <!-- end-user-doc -->
> * * @generated NOT
> */
> public WtpBaseGroupItemProvider(AdapterFactory adapterFactory) {
> super(adapterFactory);
> }
>
> @Override
> public Collection<? extends EStructuralFeature> getChildrenFeatures(
> Object object) {
> if (childrenFeatures == null) {
> super.getChildrenFeatures(object);
> childrenFeatures.add(WtpdbPackage.Literals.WTP_BASE__GROUPS) ;
> }
> return childrenFeatures;
> }
>
> }
>
> i'm getting groups 2 times


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: TableViewer binding [message #666491 is a reply to message #665929] Wed, 20 April 2011 15:02 Go to previous messageGo to next message
Alex Mising name is currently offline Alex Mising nameFriend
Messages: 61
Registered: February 2011
Member
Ed, now i am understanding where problem:
if (childrenFeatures == null) {
			super.getChildrenFeatures(object);
			childrenFeatures.add(WtpdbPackage.Literals.WTP_BASE__GROUPS);
		}

If i change this code to:
@Override
	public Collection<? extends EStructuralFeature> getChildrenFeatures(
			Object object) {
		if (childrenFeatures == null) {
			childrenFeatures = new ArrayList<EStructuralFeature>();
			childrenFeatures.add(WtpdbPackage.Literals.WTP_BASE__GROUPS);
		}
		return childrenFeatures;
	}

groups appears fine, but i'm not sure about childrenFeatures variable, maybe i must create it locally?
Re: TableViewer binding [message #666501 is a reply to message #666491] Wed, 20 April 2011 15:12 Go to previous messageGo to next message
Ed Merks is currently offline Ed MerksFriend
Messages: 33142
Registered: July 2009
Senior Member
Alex,

This new version is what I'd expect to see. It's best to reuse the
childrenFeauture's field as you've done.


Alex wrote:
> Ed, now i am understanding where problem:
>
> if (childrenFeatures == null) {
> super.getChildrenFeatures(object);
> childrenFeatures.add(WtpdbPackage.Literals.WTP_BASE__GROUPS) ;
> }
>
> If i change this code to:
>
> @Override
> public Collection<? extends EStructuralFeature> getChildrenFeatures(
> Object object) {
> if (childrenFeatures == null) {
> childrenFeatures = new ArrayList<EStructuralFeature>();
> childrenFeatures.add(WtpdbPackage.Literals.WTP_BASE__GROUPS) ;
> }
> return childrenFeatures;
> }
>
> groups appears fine, but i'm not sure about childrenFeatures variable,
> maybe i must create it locally?


Ed Merks
Professional Support: https://www.macromodeling.com/
Re: TableViewer binding [message #666541 is a reply to message #665929] Wed, 20 April 2011 19:48 Go to previous messageGo to next message
Alex Mising name is currently offline Alex Mising nameFriend
Messages: 61
Registered: February 2011
Member
Ed, thank you for your help. One more question. I know, that using XyzItemProviderFactory is not good approach to use in editor class
WtpDbReportItemProviderFactory reportFactory = new WtpDbReportItemProviderFactory();
tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(
				reportFactory));
tableViewer.setContentProvider(new AdapterFactoryContentProvider(
				reportFactory));

Instead i must use this:
Registry registry = EMFEditPlugin.getComposedAdapterFactoryDescriptorRegistry();
		adapterFactory = new ComposedAdapterFactory(registry);
adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(
				adapterFactory));
tableViewer.setContentProvider(new AdapterFactoryContentProvider(
				adapterFactory));


for this i created itemProviderAdapterFactories in EMF.Edit plugin.xml: one for TableViewer, and second for TreeTableViewer
 <factory
            uri="http://lv.psiers.wtp.datamodel.wtpdb"
            class="wtpdb.provider.WtpDbReportItemProviderFactory"
            supportedTypes=
              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
               org.eclipse.emf.edit.provider.IItemLabelProvider
               org.eclipse.emf.edit.provider.IItemPropertySource
               org.eclipse.emf.edit.provider.ITableItemLabelProvider"/>
	   <factory
            uri="http://lv.psiers.wtp.datamodel.wtpdb"
            class="wtpdb.provider.WtpDbGroupItemProviderFactory"
            supportedTypes=
              "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
               org.eclipse.emf.edit.provider.IStructuredItemContentProvider
               org.eclipse.emf.edit.provider.ITreeItemContentProvider
               org.eclipse.emf.edit.provider.IItemLabelProvider
               org.eclipse.emf.edit.provider.IItemPropertySource"/>

Now i can't understand, how can i deal with my ItemProviderFactory and ItemProvider classes.
Re: TableViewer binding [message #666638 is a reply to message #666541] Thu, 21 April 2011 12:14 Go to previous message
Ed Merks is currently offline Ed MerksFriend
Messages: 33142
Registered: July 2009
Senior Member
Alex,

Comments beow.

Alex wrote:
> Ed, thank you for your help. One more question. I know, that using
> XyzItemProviderFactory is not good approach to use in editor class
Not sure what you mean.
>
> WtpDbReportItemProviderFactory reportFactory = new
> WtpDbReportItemProviderFactory();
> tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(
> reportFactory));
> tableViewer.setContentProvider(new AdapterFactoryContentProvider(
> reportFactory));
>
> Instead i must use this:
It's fine to use this but if you want to specialize behavior for a
specific view, what you had is fine.
>
> Registry registry =
> EMFEditPlugin.getComposedAdapterFactoryDescriptorRegistry();
> adapterFactory = new ComposedAdapterFactory(registry);
> adapterFactory.addAdapterFactory(new
> ResourceItemProviderAdapterFactory());
> adapterFactory.addAdapterFactory(new
> ReflectiveItemProviderAdapterFactory());
> tableViewer.setLabelProvider(new AdapterFactoryLabelProvider(
> adapterFactory));
> tableViewer.setContentProvider(new AdapterFactoryContentProvider(
> adapterFactory));
>
>
> for this i created itemProviderAdapterFactories in EMF.Edit
> plugin.xml: one for TableViewer, and second for TreeTableViewer
>
> <factory
> uri="http://lv.psiers.wtp.datamodel.wtpdb"
> class="wtpdb.provider.WtpDbReportItemProviderFactory"
> supportedTypes=
> "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
>
> org.eclipse.emf.edit.provider.IStructuredItemContentProvider
> org.eclipse.emf.edit.provider.IItemLabelProvider
> org.eclipse.emf.edit.provider.IItemPropertySource
> org.eclipse.emf.edit.provider.ITableItemLabelProvider"/>
> <factory
> uri="http://lv.psiers.wtp.datamodel.wtpdb"
> class="wtpdb.provider.WtpDbGroupItemProviderFactory"
> supportedTypes=
> "org.eclipse.emf.edit.provider.IEditingDomainItemProvider
>
> org.eclipse.emf.edit.provider.IStructuredItemContentProvider
> org.eclipse.emf.edit.provider.ITreeItemContentProvider
> org.eclipse.emf.edit.provider.IItemLabelProvider
> org.eclipse.emf.edit.provider.IItemPropertySource"/>
These look like conflicting registrations.
>
> Now i can't understand, how can i deal with my ItemProviderFactory and
> ItemProvider classes.
I thought you had it working.


Ed Merks
Professional Support: https://www.macromodeling.com/
Previous Topic:[CDO] NullPointerException in CDODataOutputImpl.writeCDOIDAndVersion()
Next Topic:Custom XML handler
Goto Forum:
  


Current Time: Fri Apr 26 12:25:14 GMT 2024

Powered by FUDForum. Page generated in 0.03156 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top