/*****************************************************************************
* Copyright (c) 2009 CEA LIST & LIFL
*
*
* 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:
* Cedric Dumoulin Cedric.dumoulin@lifl.fr - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.infra.core.sasheditor.di.contentprovider.internal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr;
import org.eclipse.papyrus.infra.core.sashwindows.di.PageRef;
import org.eclipse.papyrus.infra.core.sashwindows.di.SashWindowsMngr;
import org.eclipse.papyrus.infra.core.sashwindows.di.TabFolder;
/**
* Implementation of the page manager.
* The page manager provides basic methods to access the DiSashModel and its PageList.
* This is the users interface to add, open, close and remove pages.
*
* @author cedric dumoulin
*/
public class PageMngrImpl implements IPageMngr {
/** Internal EMF model */
private SashWindowsMngr diSashModel;
ContentChangedEventProvider contentChangedEventProvider;
public PageMngrImpl(SashWindowsMngr diSashModel, ContentChangedEventProvider contentChangedEventProvider) {
this.diSashModel = diSashModel;
this.contentChangedEventProvider = contentChangedEventProvider;
}
/**
* Add a page to the PageList. Do not open the corresponding editor.
* The page will be visible in the list.
*
* @see org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr#addEditor(org.eclipse.emf.ecore.EObject)
*
* @param pageIdentifier
*/
public void addPage(Object pageIdentifier) {
// We do not need to disable event delivering,
// as addition to pageList doesn't fire events.
diSashModel.getPageList().addPage(pageIdentifier);
}
/**
* @see org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr#allPages()
*
* @return
*/
public List<Object> allPages() {
// TODO : use and return a shadow list ?
List<Object> list = new ArrayList<Object>();
for(PageRef pageRef : diSashModel.getPageList().getAvailablePage()) {
list.add(pageRef.getPageIdentifier());
}
return list;
}
/**
* Remove the page from the SashModel
*
* @see org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr#closePage(org.eclipse.emf.ecore.EObject)
*
* @param pageIdentifier
*/
public void closePage(Object pageIdentifier) {
contentChangedEventProvider.setDeliver(false);
diSashModel.getSashModel().removePageAndEmptyFolder(pageIdentifier);
contentChangedEventProvider.setDeliver(true);
}
/**
* Remove all pages from the SashModel. Left only the top level folder
*
* @see org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr#closePage(org.eclipse.emf.ecore.EObject)
*
* @param pageIdentifier
*/
public void closeAllOpenedPages() {
contentChangedEventProvider.setDeliver(false);
diSashModel.getSashModel().removeAllPages();
contentChangedEventProvider.setDeliver(true);
}
/**
* Remove all pages from the SashModel. Left only the top level folder
*
* @see org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr#closePage(org.eclipse.emf.ecore.EObject)
*
* @param pageIdentifier
*/
public void closeOtherPages(Object pageIdentifier) {
contentChangedEventProvider.setDeliver(false);
diSashModel.getSashModel().removeOtherPages(pageIdentifier);
contentChangedEventProvider.setDeliver(true);
}
/**
* @see org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr#openPage(org.eclipse.emf.ecore.EObject)
*
* @param pageIdentifier
*/
public void openPage(Object pageIdentifier) {
// Add the page to the SashModel and to the PageList
// We do not need to disable event delivering as the operation already fired
// one single event.
Iterator<PageRef> iterator = diSashModel.getPageList().getAvailablePage().iterator();
boolean found = false;
while(iterator.hasNext() && found == false) {
// Bug #288806 : the test should be inversed
if(pageIdentifier.equals(iterator.next().getPageIdentifier())) {
found = true;
}
}
if(!found) {
diSashModel.getPageList().addPage(pageIdentifier);
}
diSashModel.getSashModel().addPage(pageIdentifier);
}
/**
* @see org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr#removePage(org.eclipse.emf.ecore.EObject)
*
* @param pageIdentifier
*/
public void removePage(Object pageIdentifier) {
// remove from pageList and from SashModel
diSashModel.getPageList().removePage(pageIdentifier);
contentChangedEventProvider.setDeliver(false);
diSashModel.getSashModel().removePageAndEmptyFolder(pageIdentifier);
contentChangedEventProvider.setDeliver(true);
}
/**
*
* @see org.eclipse.papyrus.infra.core.sasheditor.contentprovider.IPageMngr#isOpen(java.lang.Object)
* @param pageIdentifier
* @return
*
*/
public boolean isOpen(Object pageIdentifier) {
return diSashModel.getSashModel().lookupPage(pageIdentifier) != null;
}
}