| /******************************************************************************* |
| * Copyright (c) 2001, 2004 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 |
| * Jens Lukowski/Innoopract - initial renaming/restructuring |
| * |
| *******************************************************************************/ |
| package org.eclipse.wst.sse.core; |
| |
| /** |
| * An abstract implementation of AdapterFactory that uses itself as the key. |
| * Subclass to override behavior. |
| */ |
| abstract public class AbstractAdapterFactory implements AdapterFactory { |
| |
| protected Object adapterKey; |
| protected boolean shouldRegisterAdapter = true; |
| |
| public AbstractAdapterFactory() { |
| // default constructor sets the adapterKey to the adapter factory |
| // itself (i.e. "this") |
| adapterKey = this; |
| } |
| |
| public AbstractAdapterFactory(Object adapterKey, boolean registerAdapters) { |
| this.adapterKey = adapterKey; |
| this.shouldRegisterAdapter = registerAdapters; |
| } |
| |
| public INodeAdapter adapt(INodeNotifier target) { |
| // target was null when all text deleted? |
| if (target == null) |
| return null; |
| INodeAdapter adapter = target.getExistingAdapter(adapterKey); |
| return adapter != null ? adapter : adaptNew(target); |
| } |
| |
| public INodeAdapter adaptNew(INodeNotifier target) { |
| INodeAdapter adapter = createAdapter(target); |
| if (adapter == null) |
| return adapter; |
| if (shouldRegisterAdapter) |
| target.addAdapter(adapter); |
| return adapter; |
| } |
| |
| /** |
| * Subclasses should normally implement their own 'copy' method. By |
| * default, we'll return the same instance, for convenience of those using |
| * singleton factories. |
| */ |
| public AdapterFactory copy() { |
| return this; |
| } |
| |
| abstract protected INodeAdapter createAdapter(INodeNotifier target); |
| |
| public boolean isFactoryForType(Object type) { |
| return type.equals(adapterKey); |
| } |
| |
| public void release() { |
| // default is to do nothing |
| } |
| |
| public void setAdapterKey(Object key) { |
| if (adapterKey != null) |
| throw new IllegalAccessError("INodeAdapter Key cannot be set more than once."); //$NON-NLS-1$ |
| adapterKey = key; |
| } |
| |
| public void setRegisterAdapters(boolean flag) { |
| shouldRegisterAdapter = flag; |
| } |
| } |