blob: 60e13b3a46cba60305357ac4fc9074830851db7b [file] [log] [blame]
// PropertyStringProviderAdapterFactory.java
package org.eclipse.stem.ui.adapters.propertystrings;
/*******************************************************************************
* Copyright (c) 2007 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.IChangeNotifier;
import org.eclipse.emf.edit.provider.IDisposable;
/**
* This interface is implemented by classes that create {@link Adapter}s that
* adapt the properties of {@link org.eclipse.stem.core.common.Identifiable}s to NLS'd {@link String}s.
*/
public interface PropertyStringProviderAdapterFactory {
/**
* This is the singleton instance of the factory that creates
* {@link PropertyStringProvider} instances.
* <p>
* This instance is a {@link ComposedAdapterFactory} which means that it
* collects together other {@link ComposeableAdapterFactory} adapter
* factories. Each class that implements
* {@link PropertyStringProviderAdapterFactory} needs to add itself to this
* instance with a call to
* {@link ComposedAdapterFactory#addAdapterFactory(org.eclipse.emf.common.notify.AdapterFactory)}.
* This will then allow adapters created by that factory to be found when
* adapting class instances handled by the new factory.
* <p>
* Basically, if you create an EMF model and define a
* {@link PropertyStringProviderAdapterFactory} for it so that the classes
* in that model can be adapted, you need to hook that factory into this one
* so that later when an attempt is made to adapt a class from that model is
* made the associated factory will be found. You can do that by adding the
* line: <code>
* PropertyStringProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
* </code>
* to the default constructor of the new factory after the super call.
* You're not done however, you also have to "force" an instance of the
* class to be created so that the constructor is run. This is typically
* achieved by allocating an instance in the <code>start</code> method of
* the <code>Activator</code> of the plug-in that defines the factory.
*/
PropertyStringProviderAdapterFactoryImpl INSTANCE = new PropertyStringProviderAdapterFactoryImpl();
/**
* This class is the implementation of the factory that creates
* {@link PropertyStringProvider}'s
*/
public static class PropertyStringProviderAdapterFactoryImpl extends
ComposedAdapterFactory implements ComposeableAdapterFactory,
IChangeNotifier, IDisposable, PropertyStringProviderAdapterFactory {
private static DefaultPropertyStringProviderAdapter DEFAULT_PROPERTY_STRING_PROVIDER = new DefaultPropertyStringProviderAdapter();
/**
* @see org.eclipse.emf.edit.provider.ComposedAdapterFactory#adapt(org.eclipse.emf.common.notify.Notifier,
* java.lang.Object)
*/
@Override
public Adapter adapt(final Notifier target, final Object type) {
return returnDefaultIfNeeded(super.adapt(target, type));
}
/**
* @see org.eclipse.emf.edit.provider.ComposedAdapterFactory#adaptNew(org.eclipse.emf.common.notify.Notifier,
* java.lang.Object)
*/
@Override
public Adapter adaptNew(final Notifier target, final Object type) {
return returnDefaultIfNeeded(super.adaptNew(target, type));
}
private Adapter returnDefaultIfNeeded(final Adapter adapter) {
if (adapter == null) {
// Yes
return DEFAULT_PROPERTY_STRING_PROVIDER;
} // if
return adapter;
} // returnDefaultIfNeeded
/**
* @see org.eclipse.emf.common.notify.AdapterFactory#isFactoryForType(java.lang.Object)
*/
@Override
public boolean isFactoryForType(final Object type) {
return type == PropertyStringProvider.class;
}
} // PropertyStringProviderAdapterFactoryImpl
} // PropertyStringProviderAdapterFactory