package kr.co.apexsoft.stella.modeler.explorer.core; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.core.resources.IFile; import org.eclipse.papyrus.infra.core.resource.uml.UmlModel; import org.eclipse.papyrus.infra.core.resource.uml.UmlUtils; import org.eclipse.papyrus.infra.core.services.ServicesRegistry; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.ide.IDE; public class ApexStellaProjectMap { /** * Key : Project Path ( getLocationURI().getPath()의 리턴값 ) * Value : ApexProjectWrapper */ private static Map<String, ApexProjectWrapper> _projectMap = new HashMap<String, ApexProjectWrapper>(); public static Map<String, ApexProjectWrapper> getProjectMap() { return _projectMap; } /** * apex added * * 에디터를 열 때 ModelServices 설정 * * @param servicesRegistry */ public static ApexProjectWrapper setUpModelServices(IFile diFile, ServicesRegistry servicesRegistry) { String diPath = diFile.getLocationURI().getPath(); String projectPath = diFile.getParent().getLocationURI().getPath(); ApexProjectWrapper projectWrapper = null; UmlModel umlModel = null; umlModel = UmlUtils.getUmlModel(servicesRegistry); if ( ApexStellaProjectMap.getProjectMap().containsKey(projectPath) ) { projectWrapper = (ApexProjectWrapper) ApexStellaProjectMap.getProjectMap().get(projectPath); if ( !projectWrapper.getUmlModelMap().containsKey(diPath) ) { projectWrapper.put(diPath, umlModel); projectWrapper.setIsDisposed(diPath, new Boolean(false)); projectWrapper.put(diPath, servicesRegistry); } } else { projectWrapper = new ApexProjectWrapper(diFile.getProject()); ApexStellaProjectMap.getProjectMap().put(projectPath, projectWrapper); projectWrapper.put(diPath, umlModel); projectWrapper.put(diPath, new Boolean(false)); projectWrapper.put(diPath, servicesRegistry); } return projectWrapper; } /** * diFile이 close될 때 Services 처리 * * @param diFile */ public static void clearModelServices(IFile diFile) { String diPath = diFile.getLocationURI().getPath(); String projectPath = diFile.getParent().getLocationURI().getPath(); ApexProjectWrapper projectWrapper = null; projectWrapper = (ApexProjectWrapper) ApexStellaProjectMap.getProjectMap().get(projectPath); if ( projectWrapper != null ) { if ( projectWrapper.getUmlModelMap().containsKey(diPath) ) { projectWrapper.removeUmlModel(diPath); } if ( projectWrapper.getIsDisposedMap().containsKey(diPath) ) { projectWrapper.setIsDisposed(diPath, new Boolean(true)); } if ( projectWrapper.getServicesRegistryMap().containsKey(diPath) ) { projectWrapper.removeServicesRegistry(diPath); } if ( projectWrapper.getDIWrapperMap().containsKey(diPath) ) { projectWrapper.removeDIWrapper(diPath); } } } /** * diFile이 삭제될 때 Services 처리 * * @param diFile */ public static void removeModelServices(IFile diFile) { String diPath = diFile.getLocationURI().getPath(); String projectPath = diFile.getParent().getLocationURI().getPath(); ApexProjectWrapper projectWrapper = null; projectWrapper = (ApexProjectWrapper) ApexStellaProjectMap.getProjectMap().get(projectPath); if ( projectWrapper != null ) { if ( projectWrapper.getUmlModelMap().containsKey(diPath) ) { projectWrapper.removeUmlModel(diPath); } if ( projectWrapper.getIsDisposedMap().containsKey(diPath) ) { projectWrapper.removeIsDisposedMap(diPath); } if ( projectWrapper.getServicesRegistryMap().containsKey(diPath) ) { projectWrapper.removeServicesRegistry(diPath); } if ( projectWrapper.getDIWrapperMap().containsKey(diPath) ) { projectWrapper.removeDIWrapper(diPath); } List<String> deletedDIWrapperKeyList = projectWrapper.getDeletedDIWrapperKeyList(); if ( !deletedDIWrapperKeyList.contains(diPath) ) { deletedDIWrapperKeyList.add(diPath); } } } public static IEditorPart openEditor(IFile diFile) { IEditorPart result = null; try { result = IDE.openEditor(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(), diFile, false); } catch (PartInitException e) { e.printStackTrace(); } return result; } }