core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/editor/PortalEditor.java
changeset 1705 71a151b1b515
parent 1684 c2eba6dabd38
child 1721 18638adda547
--- a/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/editor/PortalEditor.java	Tue Jul 27 15:28:19 2010 -0500
+++ b/core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/editor/PortalEditor.java	Tue Jul 27 15:29:41 2010 -0500
@@ -20,7 +20,9 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
@@ -38,7 +40,6 @@
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.graphics.Resource;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Event;
 import org.eclipse.swt.widgets.Listener;
@@ -49,12 +50,12 @@
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.EditorPart;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
 
 import com.nokia.carbide.discovery.ui.Activator;
 import com.nokia.carbide.discovery.ui.Messages;
 import com.nokia.carbide.internal.discovery.ui.extension.IPortalEditor;
-import com.nokia.carbide.internal.discovery.ui.extension.IPortalExtension;
-import com.nokia.carbide.internal.discovery.ui.extension.IPortalExtension.IActionBar;
+import com.nokia.carbide.internal.discovery.ui.extension.IPortalPageLayer;
 import com.nokia.cpp.internal.api.utils.core.Pair;
 import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;
 
@@ -75,30 +76,51 @@
 		loadPortalPages();
 	}
 	
+	private Map<String, List<IPortalPageLayer>> loadPortalLayers() {
+		Map<String, List<IPortalPageLayer>> pageIdToExtensionsMap = new HashMap<String, List<IPortalPageLayer>>();
+		IConfigurationElement[] elements = 
+			Platform.getExtensionRegistry().getConfigurationElementsFor(Activator.PLUGIN_ID + ".portalPageLayer"); //$NON-NLS-1$
+		for (IConfigurationElement element : elements) {
+			String pageId = element.getAttribute("pageId"); //$NON-NLS-1$
+			try {
+				IPortalPageLayer extension = (IPortalPageLayer) element.createExecutableExtension("class"); //$NON-NLS-1$
+				if (!pageIdToExtensionsMap.containsKey(pageId))
+					pageIdToExtensionsMap.put(pageId, new ArrayList<IPortalPageLayer>());
+				pageIdToExtensionsMap.get(pageId).add(extension);
+			} catch (CoreException e) {
+				Activator.logError(MessageFormat.format(Messages.PortalEditor_PageLoadError, pageId), e);
+			}
+		}
+		return pageIdToExtensionsMap;
+	}
+
 	private void loadPortalPages() {
+		Map<String, List<IPortalPageLayer>> portalLayersMap = loadPortalLayers();
 		List<Pair<PortalPage, Integer>> pageList = new ArrayList<Pair<PortalPage, Integer>>();
 		IConfigurationElement[] elements = 
 			Platform.getExtensionRegistry().getConfigurationElementsFor(Activator.PLUGIN_ID + ".portalPage"); //$NON-NLS-1$
 		for (IConfigurationElement element : elements) {
-			try {
-				IPortalExtension portalExtension = (IPortalExtension) element.createExecutableExtension("class"); //$NON-NLS-1$
-				String id = element.getAttribute("id"); //$NON-NLS-1$
-				String orderString = element.getAttribute("order"); //$NON-NLS-1$
-				int order = Integer.MAX_VALUE;
-				if (orderString != null) {
-					try {
-						order = Integer.parseInt(orderString);
-					}
-					catch (NumberFormatException e) {
-						Activator.logError(MessageFormat.format(Messages.PortalEditor_PageRankError,
-										portalExtension.getClass().getName()), e);
-					}
+			String id = element.getAttribute("id"); //$NON-NLS-1$
+			int order = Integer.MAX_VALUE;
+			String orderString = element.getAttribute("order"); //$NON-NLS-1$
+			if (orderString != null) {
+				try {
+					order = Integer.parseInt(orderString);
+				}
+				catch (NumberFormatException e) {
+					Activator.logError(MessageFormat.format(Messages.PortalEditor_PageRankError, id), e);
 				}
-				pageList.add(new Pair<PortalPage, Integer>(new PortalPage(portalExtension, id), order));
-			} 
-			catch (CoreException e) {
-				Activator.logError(Messages.PortalEditor_PageLoadError, e);
 			}
+			String title = element.getAttribute("title"); //$NON-NLS-1$
+			String imageFilePath = element.getAttribute("image"); //$NON-NLS-1$
+			String pluginId = element.getContributor().getName();
+			ImageDescriptor imageDesc = AbstractUIPlugin.imageDescriptorFromPlugin(pluginId, imageFilePath);
+			List<IPortalPageLayer> portalLayers = portalLayersMap.get(id);
+			if (portalLayers == null || portalLayers.isEmpty()) {
+				Activator.logError(MessageFormat.format("Could not load portal page because no layers were found for id: {0}", id), null);
+			}
+			PortalPage portalPage = new PortalPage(title, imageDesc, id, portalLayers);
+			pageList.add(new Pair<PortalPage, Integer>(portalPage, order));
 		}
 		Collections.sort(pageList, new Comparator<Pair<PortalPage, Integer>>() {
 			@Override
@@ -160,40 +182,11 @@
 	private void createStackComposite(Composite parent, NavigationBar bar) {
 		stackComposite = new StackComposite(parent, backgroundParent);
 		for (PortalPage page : pages) {
-			page.setControl(createPage(page.getPortalExtension()));
+			page.createPageComposite(stackComposite, this);
 		}
 		GridDataFactory.fillDefaults().grab(true, true).applyTo(stackComposite);
 	}
 
-	private Control createPage(IPortalExtension page) {
-		Composite pageComposite = new SharedBackgroundComposite(stackComposite, backgroundParent);
-		GridLayoutFactory.fillDefaults().numColumns(2).spacing(20, 0).extendedMargins(20, 20, 20, 0).applyTo(pageComposite);
-		ActionUIUpdater updater = new ActionUIUpdater();
-		IActionBar[] commandBars = page.createCommandBars(this, updater);
-		if (commandBars.length > 0) {
-			Composite taskComposite = new SharedBackgroundComposite(pageComposite, backgroundParent);
-			GridLayoutFactory.fillDefaults().applyTo(taskComposite);
-			GridDataFactory.fillDefaults().grab(false, true).applyTo(taskComposite);
-			for (IActionBar actionBar : commandBars) {
-				Control control = createTaskBarControl(taskComposite, actionBar, updater);
-				GridDataFactory.fillDefaults().minSize(150, SWT.DEFAULT).grab(true, false).indent(0, 0).applyTo(control);
-			}
-		}
-		Composite pageControl = new RoundedCornerComposite(pageComposite, backgroundParent, 
-				null, pageComposite.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
-		GridLayoutFactory.fillDefaults().margins(2, 2).applyTo(pageControl);
-		GridDataFactory.fillDefaults().grab(true, true).applyTo(pageControl);
-		Control control = page.createControl(pageControl, this);
-		GridDataFactory.fillDefaults().grab(true, true).applyTo(control);
-		return pageComposite;
-	}
-
-	private Control createTaskBarControl(Composite clientArea, IActionBar actionBar, ActionUIUpdater updater) {
-		TaskBar taskBar = new TaskBar(clientArea, this, actionBar);
-		updater.addTaskBar(taskBar);
-		return taskBar;
-	}
-
 	private NavigationBar createNavigationBar(Composite parent) {
 		NavigationBar bar = new NavigationBar(this, parent);
 		for (PortalPage page : pages) {
@@ -205,9 +198,9 @@
 	
 	void showPage(PortalPage page) {
 		if (!page.isInitialized()) {
-			page.getPortalExtension().init();
+			page.initialize();
 		}
-		stackComposite.showControl(page.getControl());
+		stackComposite.showControl(page.getPageControl());
 	}
 
 	private void applyBG(final Composite composite) {