blob: 6926e1be32686e4a7c1f5a940640e7e21b98be20 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008-2011 Chair for Applied Software Engineering,
* Technische Universitaet Muenchen.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* emueller
******************************************************************************/
package org.eclipse.emf.emfstore.internal.client.ui.views.changes;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.emf.emfstore.internal.client.ui.common.OperationCustomLabelProvider;
import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.AbstractOperation;
import org.eclipse.emf.emfstore.internal.server.model.versioning.operations.CompositeOperation;
/**
* Default label provider for operations.
*
* @author emueller
*
*/
public class DefaultOperationLabelProvider implements OperationCustomLabelProvider {
/**
* The label to be shown for unknown element.
*/
protected static final String UNKOWN_ELEMENT = Messages.DefaultOperationLabelProvider_UnknownElement;
private AdapterFactoryLabelProvider adapterFactoryLabelProvider;
private ComposedAdapterFactory adapterFactory;
private boolean isDisposed;
/**
* Constructor.
*/
public DefaultOperationLabelProvider() {
init();
}
/**
* Initializes the label provider.
*/
protected void init() {
if (adapterFactory == null) {
adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
}
if (adapterFactoryLabelProvider == null) {
adapterFactoryLabelProvider = new AdapterFactoryLabelProvider(adapterFactory);
}
isDisposed = false;
}
/**
*
* {@inheritDoc}
*
* @see org.eclipse.emf.emfstore.internal.client.ui.common.OperationCustomLabelProvider#getDescription(org.eclipse.emf.emfstore.internal.server.model.versioning.operations.AbstractOperation)
*/
public String getDescription(AbstractOperation operation) {
if (operation instanceof CompositeOperation) {
final CompositeOperation compositeOperation = (CompositeOperation) operation;
// artificial composite because of opposite reference,
// take description of main operation
if (compositeOperation.getMainOperation() != null) {
return getDescription(compositeOperation.getMainOperation());
}
}
if (isDisposed()) {
init();
}
return adapterFactoryLabelProvider.getText(operation);
}
/**
*
* {@inheritDoc}
*
* @see org.eclipse.emf.emfstore.internal.client.ui.common.OperationCustomLabelProvider#getImage(org.eclipse.emf.emfstore.internal.server.model.versioning.operations.AbstractOperation)
*/
public Object getImage(AbstractOperation operation) {
if (isDisposed()) {
init();
}
return adapterFactoryLabelProvider.getImage(operation);
}
/**
*
* {@inheritDoc}
*
* @see org.eclipse.emf.emfstore.internal.client.ui.common.OperationCustomLabelProvider#canRender(org.eclipse.emf.emfstore.internal.server.model.versioning.operations.AbstractOperation)
*/
public CanRender canRender(AbstractOperation operation) {
return CanRender.Yes;
}
/**
*
* {@inheritDoc}
*
* @see org.eclipse.emf.emfstore.internal.client.ui.common.OperationCustomLabelProvider#getModelElementName(org.eclipse.emf.ecore.EObject)
*/
public String getModelElementName(EObject modelElement) {
if (isDisposed()) {
init();
}
if (modelElement == null) {
return UNKOWN_ELEMENT;
}
// TODO: provide sensible label for given model element
return trim(adapterFactoryLabelProvider.getText(modelElement));
}
private String trim(Object object) {
final String string = object.toString();
final String result = string.trim();
if (result.length() == 0) {
return Messages.DefaultOperationLabelProvider_EmptyName;
}
return result;
}
/**
*
* {@inheritDoc}
*
* @see org.eclipse.emf.emfstore.internal.common.ESDisposable#dispose()
*/
public void dispose() {
if (adapterFactory != null) {
adapterFactory.dispose();
adapterFactory = null;
}
if (adapterFactoryLabelProvider != null) {
adapterFactoryLabelProvider.dispose();
adapterFactoryLabelProvider = null;
}
isDisposed = true;
}
/**
* @return whether the label provider is disposed. A disposed label provider has to be {@link #init() initialized}
* again.
*/
protected boolean isDisposed() {
return isDisposed;
}
/**
* Returns the label provider.
*
* @return the label provider
*/
protected AdapterFactoryLabelProvider getAdapterFactoryLabelProvider() {
return adapterFactoryLabelProvider;
}
}