/******************************************************************************* * Copyright (c) 2006-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 * IBM Research *******************************************************************************/ package com.ibm.research.tours.fx.elements; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.Platform; import org.eclipse.ui.IMemento; import com.ibm.research.tours.AbstractTourElement; import com.ibm.research.tours.fx.IHighlightEffect; import com.ibm.research.tours.fx.IHighlightable; import com.ibm.research.tours.fx.ToursFxPlugin; public abstract class HighlightableTourElement extends AbstractTourElement implements IHighlightable { public static final String HIGHLIGHT_EFFECT_ELEMENT = "highlight"; private IHighlightEffect fHighlightEffect; private IHighlightEffect[] instances; public IHighlightEffect getHighlightEffect() { return fHighlightEffect; } public void setHighlightEffect(IHighlightEffect highlightEffect) { if(!(fHighlightEffect == highlightEffect)) { fHighlightEffect = highlightEffect; fireElementChangedEvent(); } } public IHighlightEffect[] getSupportedHighlightEffects() { if ( instances==null ) { IExtensionPoint extPt = Platform.getExtensionRegistry().getExtensionPoint(ToursFxPlugin.PLUGIN_ID + ".highlightEffect"); IExtension[] extensions = extPt.getExtensions(); if ( extensions==null ) return new IHighlightEffect[0]; List<IHighlightEffect> effects = new ArrayList<IHighlightEffect>(); for (IExtension ext : extensions) { IConfigurationElement[] elements = ext.getConfigurationElements(); for (IConfigurationElement elem : elements) { try { IHighlightEffect effect = (IHighlightEffect) elem.createExecutableExtension("class"); effects.add(effect); } catch (CoreException e) { ToursFxPlugin.log("error processing configuration element " + elem, e); } } } instances = (IHighlightEffect[]) effects.toArray(new IHighlightEffect[effects.size()]); } return instances; // new IHighlightEffect[]{DefaultHighlightEffect.getInstance(),MismarHighlightEffect.getInstance(),LetterboxEffect.getInstance(),UnhighlightEffect.getInstance(),GlobalHighlightEffect.getInstance()}; } @Override public void load(IMemento memento) { super.load(memento); IMemento highlightMemento = memento.getChild(HIGHLIGHT_EFFECT_ELEMENT); if(highlightMemento !=null) { String highlightString = highlightMemento.getTextData(); if(highlightString!=null) { IHighlightEffect[] effects = getSupportedHighlightEffects(); for(IHighlightEffect effect : effects) if(effect.getText().equals(highlightString)) setHighlightEffect(effect); } } } @Override public void save(IMemento memento) { super.save(memento); if(getHighlightEffect()!=null) { IMemento highlightMemento = memento.createChild(HIGHLIGHT_EFFECT_ELEMENT); highlightMemento.putTextData(getHighlightEffect().getText()); } } }