/* ********************************************************************** ** ** Copyright notice ** ** ** ** (c) 2005-2009 RSSOwl Development Team ** ** http://www.rssowl.org/ ** ** ** ** 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.rssowl.org/legal/epl-v10.html ** ** ** ** A copy is found in the file epl-v10.html and important notices to the ** ** license from the team is found in the textfile LICENSE.txt distributed ** ** in this package. ** ** ** ** This copyright notice MUST APPEAR in all copies of the file! ** ** ** ** Contributors: ** ** RSSOwl Development Team - initial API and implementation ** ** ** ** ********************************************************************** */ package org.rssowl.ui.internal.editors.feed; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.ui.IElementFactory; import org.eclipse.ui.IMemento; import org.rssowl.core.persist.IFolder; import org.rssowl.core.persist.INewsMark; import org.rssowl.core.persist.dao.DynamicDAO; import org.rssowl.ui.internal.FolderNewsMark; /** * @author bpasero */ public class FeedViewFactory implements IElementFactory { /* * @see org.eclipse.ui.IElementFactory#createElement(org.eclipse.ui.IMemento) */ public IAdaptable createElement(IMemento memento) { /* Check for IMark */ String inputId = memento.getString(FeedViewInput.MARK_INPUT_ID); if (inputId != null) { String inputClass = memento.getString(FeedViewInput.MARK_INPUT_CLASS); /* Special Case Folders */ if (FolderNewsMark.class.getName().equals(inputClass)) { IFolder folder = DynamicDAO.load(IFolder.class, Long.valueOf(inputId)); if (folder != null) return new FeedViewInput(new FolderNewsMark(folder)); } /* Normal NewsMark */ else { try { Class<?> klass = Class.forName(inputClass, true, Thread.currentThread().getContextClassLoader()); if (INewsMark.class.isAssignableFrom(klass)) { Class<? extends INewsMark> markClass = klass.asSubclass(INewsMark.class); INewsMark mark = DynamicDAO.load(markClass, Long.valueOf(inputId)); if (mark != null) return new FeedViewInput(mark); } else throw new IllegalStateException(FeedViewInput.MARK_INPUT_CLASS + " does not implement IMark: " + inputClass); //$NON-NLS-1$ } catch (ClassNotFoundException e) { /* Should never happen */ throw new IllegalStateException(e); } } } return null; } }