blob: c586bca4a480fb9d1bbd668460ddb9a96930c879 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2015 THALES GLOBAL SERVICES.
* 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:
* Thales - initial API and implementation
*******************************************************************************/
package org.eclipse.amalgam.explorer.activity.ui.api.editor.pages.helper;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import org.eclipse.amalgam.explorer.activity.ui.internal.util.EcoreUtil2;
import org.eclipse.core.resources.IFile;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
import org.eclipse.sirius.business.api.session.Session;
import org.eclipse.sirius.business.api.session.SessionManager;
import org.eclipse.sirius.business.api.session.danalysis.DAnalysisSession;
public class SessionHelper {
public static IFile getFirstAnalysisFile(DAnalysisSession session_p) {
IFile result = null;
Resource resource = session_p.getSessionResource();
// Precondition.
if (null == resource) {
return result;
}
result = WorkspaceSynchronizer.getFile(resource);
return result;
}
/**
* Get the project (only one instance) for given session.
*
* @param session_p
* @return must be not <code>null</code>.
*/
public static EObject getRootSemanticModel(Session session_p) {
EObject result = null;
Iterator<Resource> semanticResources = session_p.getSemanticResources().iterator();
// Iterate over semantic resources to search for a project.
while (semanticResources.hasNext()) {
Resource semanticResource = semanticResources.next();
result = semanticResource.getContents().get(0);
break;
}
return result;
}
/**
* Get a session for given diagram file (i.e aird file).<br>
* Only compare the given file with the first diagram resource.
*
* @param firstDiagramResourceFile_p
* the file is expected to be the first diagram file contained in
* a session.
* @return <code>null</code> if no session found among all active sessions.
*/
public static Session getSession(IFile firstDiagramResourceFile_p) {
Session result = null;
// Iterate over active sessions to search the ones that semantic
// resources are contained by the project.
if (firstDiagramResourceFile_p != null) {
Iterator<Session> allActiveSessions = SessionManager.INSTANCE.getSessions().iterator();
while (allActiveSessions.hasNext() && (null == result)) {
Session session = allActiveSessions.next();
if (session instanceof DAnalysisSession) {
IFile sessionAnalysisFile = getFirstAnalysisFile((DAnalysisSession) session);
if (firstDiagramResourceFile_p.equals(sessionAnalysisFile)) {
// Found.
result = session;
}
}
}
}
return result;
}
/**
* Get a session for given analysis file.<br>
*
* @param selectedElement_p
* @return <code>null</code> if no session found among all active sessions.
*/
public static Session getSessionForDiagramFile(IFile diagramResourceFile_p) {
Session result = null;
// Iterate over active sessions to search the ones that semantic
// resources are contained by the project.
Iterator<Session> allActiveSessions = SessionManager.INSTANCE.getSessions().iterator();
while (allActiveSessions.hasNext() && (null == result)) {
Session session = allActiveSessions.next();
if (session instanceof DAnalysisSession) {
if (isAnalysisFileInvolvedIn((DAnalysisSession) session, diagramResourceFile_p)) {
// Found.
result = session;
}
}
}
return result;
}
public static boolean isAnalysisFileInvolvedIn(DAnalysisSession session_p, IFile analysisFile_p) {
boolean result = false;
// Precondition.
if ((null == session_p) || (null == analysisFile_p)) {
return result;
}
// Get all resources involved in the session.
Collection<Resource> allAnalysisResources = getAllAirdResources(session_p);
Iterator<Resource> analysisResources = allAnalysisResources.iterator();
while (analysisResources.hasNext()) {
Resource resource = analysisResources.next();
if (analysisFile_p.equals(EcoreUtil2.getFile(resource))) {
result = true;
break;
}
}
return result;
}
/**
* Get all aird resources contained in specified session.
*
* @param session_p
* @return a not <code>null</code> collection.
*/
public static Collection<Resource> getAllAirdResources(Session session_p) {
Collection<Resource> allAnalysisResources = new HashSet<Resource>(session_p.getReferencedSessionResources());
allAnalysisResources.add(session_p.getSessionResource());
return allAnalysisResources;
}
}