core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/editor/PortalEditor.java
changeset 1684 c2eba6dabd38
parent 1661 cd8159f371c7
child 1705 71a151b1b515
equal deleted inserted replaced
1679:4dbd593daf6d 1684:c2eba6dabd38
    18 
    18 
    19 import java.text.MessageFormat;
    19 import java.text.MessageFormat;
    20 import java.util.ArrayList;
    20 import java.util.ArrayList;
    21 import java.util.Collections;
    21 import java.util.Collections;
    22 import java.util.Comparator;
    22 import java.util.Comparator;
    23 import java.util.HashMap;
       
    24 import java.util.List;
    23 import java.util.List;
    25 import java.util.Map;
       
    26 
    24 
    27 import org.eclipse.core.runtime.CoreException;
    25 import org.eclipse.core.runtime.CoreException;
    28 import org.eclipse.core.runtime.IConfigurationElement;
    26 import org.eclipse.core.runtime.IConfigurationElement;
    29 import org.eclipse.core.runtime.IProgressMonitor;
    27 import org.eclipse.core.runtime.IProgressMonitor;
    30 import org.eclipse.core.runtime.Platform;
    28 import org.eclipse.core.runtime.Platform;
    43 import org.eclipse.swt.widgets.Control;
    41 import org.eclipse.swt.widgets.Control;
    44 import org.eclipse.swt.widgets.Display;
    42 import org.eclipse.swt.widgets.Display;
    45 import org.eclipse.swt.widgets.Event;
    43 import org.eclipse.swt.widgets.Event;
    46 import org.eclipse.swt.widgets.Listener;
    44 import org.eclipse.swt.widgets.Listener;
    47 import org.eclipse.ui.IEditorInput;
    45 import org.eclipse.ui.IEditorInput;
       
    46 import org.eclipse.ui.IEditorPart;
    48 import org.eclipse.ui.IEditorSite;
    47 import org.eclipse.ui.IEditorSite;
    49 import org.eclipse.ui.IPersistableElement;
    48 import org.eclipse.ui.IPersistableElement;
    50 import org.eclipse.ui.PartInitException;
    49 import org.eclipse.ui.PartInitException;
    51 import org.eclipse.ui.PlatformUI;
    50 import org.eclipse.ui.PlatformUI;
    52 import org.eclipse.ui.part.EditorPart;
    51 import org.eclipse.ui.part.EditorPart;
    53 
    52 
    54 import com.nokia.carbide.discovery.ui.Activator;
    53 import com.nokia.carbide.discovery.ui.Activator;
    55 import com.nokia.carbide.discovery.ui.Messages;
    54 import com.nokia.carbide.discovery.ui.Messages;
    56 import com.nokia.carbide.internal.discovery.ui.extension.IPortalPage;
    55 import com.nokia.carbide.internal.discovery.ui.extension.IPortalEditor;
    57 import com.nokia.carbide.internal.discovery.ui.extension.IPortalPage.IActionBar;
    56 import com.nokia.carbide.internal.discovery.ui.extension.IPortalExtension;
       
    57 import com.nokia.carbide.internal.discovery.ui.extension.IPortalExtension.IActionBar;
    58 import com.nokia.cpp.internal.api.utils.core.Pair;
    58 import com.nokia.cpp.internal.api.utils.core.Pair;
    59 import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;
    59 import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;
    60 
    60 
    61 public class PortalEditor extends EditorPart {
    61 public class PortalEditor extends EditorPart implements IPortalEditor {
    62 
    62 
    63 	private static final String ID = "com.nokia.carbide.discovery.ui.portalEditor"; //$NON-NLS-1$
    63 	private static final String ID = "com.nokia.carbide.discovery.ui.portalEditor"; //$NON-NLS-1$
    64 	private static final String CONTEXT_ID = ID + ".context"; //$NON-NLS-1$
    64 	private static final String CONTEXT_ID = ID + ".context"; //$NON-NLS-1$
    65 	private static IEditorInput input;
    65 	private static IEditorInput input;
    66 	private List<IPortalPage> uninitializedPages;
    66 	private List<PortalPage> pages;
    67 	private Composite backgroundParent;
    67 	private Composite backgroundParent;
    68 	private Image oldBGImg;
    68 	private Image oldBGImg;
    69 	private List<Resource> resources;
    69 	private List<Resource> resources;
    70 	private StackComposite stackComposite;
    70 	private StackComposite stackComposite;
    71 	
       
    72 	private Map<IPortalPage, Control> pageToControlMap;
       
    73 	private NavigationBar navigationBar;
    71 	private NavigationBar navigationBar;
    74 
    72 
    75 	public PortalEditor() {
    73 	public PortalEditor() {
    76 		resources = new ArrayList<Resource>();
    74 		resources = new ArrayList<Resource>();
    77 		loadPortalPages();
    75 		loadPortalPages();
    78 		pageToControlMap = new HashMap<IPortalPage, Control>();
       
    79 	}
    76 	}
    80 	
    77 	
    81 	private void loadPortalPages() {
    78 	private void loadPortalPages() {
    82 		List<Pair<IPortalPage, Integer>> pageExtensions = new ArrayList<Pair<IPortalPage,Integer>>();
    79 		List<Pair<PortalPage, Integer>> pageList = new ArrayList<Pair<PortalPage, Integer>>();
    83 		IConfigurationElement[] elements = 
    80 		IConfigurationElement[] elements = 
    84 			Platform.getExtensionRegistry().getConfigurationElementsFor(Activator.PLUGIN_ID + ".portalPage"); //$NON-NLS-1$
    81 			Platform.getExtensionRegistry().getConfigurationElementsFor(Activator.PLUGIN_ID + ".portalPage"); //$NON-NLS-1$
    85 		for (IConfigurationElement element : elements) {
    82 		for (IConfigurationElement element : elements) {
    86 			try {
    83 			try {
    87 				IPortalPage portalPage = (IPortalPage) element.createExecutableExtension("class"); //$NON-NLS-1$
    84 				IPortalExtension portalExtension = (IPortalExtension) element.createExecutableExtension("class"); //$NON-NLS-1$
    88 				String rankString = element.getAttribute("rank"); //$NON-NLS-1$
    85 				String id = element.getAttribute("id"); //$NON-NLS-1$
    89 				int rank = Integer.MAX_VALUE;
    86 				String orderString = element.getAttribute("order"); //$NON-NLS-1$
    90 				if (rankString != null) {
    87 				int order = Integer.MAX_VALUE;
       
    88 				if (orderString != null) {
    91 					try {
    89 					try {
    92 						rank = Integer.parseInt(rankString);
    90 						order = Integer.parseInt(orderString);
    93 					}
    91 					}
    94 					catch (NumberFormatException e) {
    92 					catch (NumberFormatException e) {
    95 						Activator.logError(MessageFormat.format(Messages.PortalEditor_PageRankError,
    93 						Activator.logError(MessageFormat.format(Messages.PortalEditor_PageRankError,
    96 										portalPage.getClass().getName()), e);
    94 										portalExtension.getClass().getName()), e);
    97 					}
    95 					}
    98 				}
    96 				}
    99 				pageExtensions.add(new Pair<IPortalPage, Integer>(portalPage, rank));
    97 				pageList.add(new Pair<PortalPage, Integer>(new PortalPage(portalExtension, id), order));
   100 			} 
    98 			} 
   101 			catch (CoreException e) {
    99 			catch (CoreException e) {
   102 				Activator.logError(Messages.PortalEditor_PageLoadError, e);
   100 				Activator.logError(Messages.PortalEditor_PageLoadError, e);
   103 			}
   101 			}
   104 		}
   102 		}
   105 		Collections.sort(pageExtensions, new Comparator<Pair<IPortalPage, Integer>>() {
   103 		Collections.sort(pageList, new Comparator<Pair<PortalPage, Integer>>() {
   106 			@Override
   104 			@Override
   107 			public int compare(Pair<IPortalPage, Integer> o1, Pair<IPortalPage, Integer> o2) {
   105 			public int compare(Pair<PortalPage, Integer> o1, Pair<PortalPage, Integer> o2) {
   108 				return o1.second.compareTo(o2.second);
   106 				return o1.second.compareTo(o2.second);
   109 			}
   107 			}
   110 		});
   108 		});
   111 		uninitializedPages = new ArrayList<IPortalPage>();
   109 		pages = new ArrayList<PortalPage>();
   112 		for (Pair<IPortalPage, Integer> pair : pageExtensions) {
   110 		for (Pair<PortalPage, Integer> pair : pageList) {
   113 			uninitializedPages.add(pair.first);
   111 			pages.add(pair.first);
   114 		}
   112 		}
   115 	}
   113 	}
   116 
   114 
   117 	@Override
   115 	@Override
   118 	public void doSave(IProgressMonitor monitor) {
   116 	public void doSave(IProgressMonitor monitor) {
   149 	private Composite createBody(final Composite parent) {
   147 	private Composite createBody(final Composite parent) {
   150 		// create background
   148 		// create background
   151 		backgroundParent = new Composite(parent, SWT.NONE);
   149 		backgroundParent = new Composite(parent, SWT.NONE);
   152 		applyBG(backgroundParent);
   150 		applyBG(backgroundParent);
   153 		GridLayoutFactory.fillDefaults().applyTo(backgroundParent);
   151 		GridLayoutFactory.fillDefaults().applyTo(backgroundParent);
   154 		// create top naviation bar
   152 		// create top navigation bar
   155 		navigationBar = createNavigationBar(backgroundParent);
   153 		navigationBar = createNavigationBar(backgroundParent);
   156 		GridDataFactory.swtDefaults().grab(true, false).align(SWT.CENTER, SWT.TOP).indent(10, 10).applyTo(navigationBar);
   154 		GridDataFactory.swtDefaults().grab(true, false).align(SWT.CENTER, SWT.TOP).indent(10, 10).applyTo(navigationBar);
   157 		// create stack composite
   155 		// create stack composite
   158 		createStackComposite(backgroundParent, navigationBar);
   156 		createStackComposite(backgroundParent, navigationBar);
   159 		return backgroundParent;
   157 		return backgroundParent;
   160 	}
   158 	}
   161 
   159 
   162 	private void createStackComposite(Composite parent, NavigationBar bar) {
   160 	private void createStackComposite(Composite parent, NavigationBar bar) {
   163 		stackComposite = new StackComposite(parent, backgroundParent);
   161 		stackComposite = new StackComposite(parent, backgroundParent);
   164 		for (IPortalPage page : uninitializedPages) {
   162 		for (PortalPage page : pages) {
   165 			Control control = createPage(page);
   163 			page.setControl(createPage(page.getPortalExtension()));
   166 			pageToControlMap.put(page, control);
       
   167 		}
   164 		}
   168 		GridDataFactory.fillDefaults().grab(true, true).applyTo(stackComposite);
   165 		GridDataFactory.fillDefaults().grab(true, true).applyTo(stackComposite);
   169 	}
   166 	}
   170 
   167 
   171 	private Control createPage(IPortalPage page) {
   168 	private Control createPage(IPortalExtension page) {
   172 		Composite pageComposite = new SharedBackgroundComposite(stackComposite, backgroundParent);
   169 		Composite pageComposite = new SharedBackgroundComposite(stackComposite, backgroundParent);
   173 		GridLayoutFactory.fillDefaults().numColumns(2).spacing(20, 0).extendedMargins(20, 20, 20, 0).applyTo(pageComposite);
   170 		GridLayoutFactory.fillDefaults().numColumns(2).spacing(20, 0).extendedMargins(20, 20, 20, 0).applyTo(pageComposite);
   174 		ActionUIUpdater updater = new ActionUIUpdater();
   171 		ActionUIUpdater updater = new ActionUIUpdater();
   175 		IActionBar[] commandBars = page.createCommandBars(this, updater);
   172 		IActionBar[] commandBars = page.createCommandBars(this, updater);
   176 		if (commandBars.length > 0) {
   173 		if (commandBars.length > 0) {
   197 		return taskBar;
   194 		return taskBar;
   198 	}
   195 	}
   199 
   196 
   200 	private NavigationBar createNavigationBar(Composite parent) {
   197 	private NavigationBar createNavigationBar(Composite parent) {
   201 		NavigationBar bar = new NavigationBar(this, parent);
   198 		NavigationBar bar = new NavigationBar(this, parent);
   202 		for (IPortalPage page : uninitializedPages) {
   199 		for (PortalPage page : pages) {
   203 			bar.addNavButton(bar, page);
   200 			bar.addNavButton(bar, page);
   204 		}
   201 		}
   205 		
   202 		
   206 		return bar;
   203 		return bar;
   207 	}
   204 	}
   208 	
   205 	
   209 	void showPage(IPortalPage page) {
   206 	void showPage(PortalPage page) {
   210 		if (uninitializedPages.contains(page)) {
   207 		if (!page.isInitialized()) {
   211 			uninitializedPages.remove(page);
   208 			page.getPortalExtension().init();
   212 			page.init();
   209 		}
   213 		}
   210 		stackComposite.showControl(page.getControl());
   214 		stackComposite.showControl(pageToControlMap.get(page));
       
   215 	}
   211 	}
   216 
   212 
   217 	private void applyBG(final Composite composite) {
   213 	private void applyBG(final Composite composite) {
   218 		composite.addListener(SWT.Resize, new Listener() {
   214 		composite.addListener(SWT.Resize, new Listener() {
   219 			@Override
   215 			@Override
   317 
   313 
   318 	public Composite getBackgroundParent() {
   314 	public Composite getBackgroundParent() {
   319 		return backgroundParent;
   315 		return backgroundParent;
   320 	}
   316 	}
   321 
   317 
       
   318 	@Override
       
   319 	public IEditorPart getEditorPart() {
       
   320 		return this;
       
   321 	}
       
   322 
       
   323 	@Override
       
   324 	public void refreshCommandBars() {
       
   325 		// TODO ask portal page to recreate command bars
       
   326 	}
       
   327 
   322 }
   328 }