1 package net.mograsim.plugin.nature;
3 import java.util.Collections;
4 import java.util.HashMap;
6 import java.util.Objects;
7 import java.util.Optional;
9 import org.eclipse.core.resources.IProject;
10 import org.eclipse.core.resources.ProjectScope;
11 import org.eclipse.core.runtime.Adapters;
12 import org.eclipse.core.runtime.CoreException;
13 import org.eclipse.core.runtime.IAdaptable;
14 import org.eclipse.ui.preferences.ScopedPreferenceStore;
16 public class ProjectMachineContext
18 private static Map<IProject, MachineContext> projectMachineContexts = Collections.synchronizedMap(new HashMap<>());
20 public static final String MOGRASIM_PROJECT_PREFS_NODE = "net.mograsim";
21 public static final String MACHINE_PROPERTY = "net.mograsim.projectMachineId";
23 public static MachineContext getMachineContextOf(IProject project)
25 MachineContext mc = projectMachineContexts.get(project);
28 validateMograsimNatureProject(project);
29 mc = new MachineContext(project);
30 projectMachineContexts.put(project, mc);
34 public static MachineContext getMachineContextOf(IAdaptable mograsimProjectAdapable)
36 IProject project = Adapters.adapt(mograsimProjectAdapable, IProject.class, true);
37 Objects.requireNonNull(project, "project was null / no project found for " + mograsimProjectAdapable);
38 return getMachineContextOf(project);
41 static ScopedPreferenceStore getProjectPrefs(IProject mograsimProject)
43 return new ScopedPreferenceStore(new ProjectScope(mograsimProject), MOGRASIM_PROJECT_PREFS_NODE);
46 static IProject validateMograsimNatureProject(IAdaptable mograsimProjectAdapable)
49 if (mograsimProjectAdapable instanceof IProject)
51 project = (IProject) mograsimProjectAdapable;
54 project = Adapters.adapt(mograsimProjectAdapable, IProject.class, true);
55 Objects.requireNonNull(project, () -> mograsimProjectAdapable + " is not adaptable to IProject");
59 if (!project.isNatureEnabled(MograsimNature.NATURE_ID))
60 throw new IllegalArgumentException(mograsimProjectAdapable + "is not (in) a Mograsim project");
62 catch (CoreException e)
65 throw new IllegalArgumentException(mograsimProjectAdapable + " project nature could not be evaluated", e);
70 static boolean hasMograsimNature(IProject project)
76 return project.isNatureEnabled(MograsimNature.NATURE_ID);
78 catch (CoreException e)
85 static Optional<String> getMachineIdFrom(ScopedPreferenceStore preferenceStore)
87 if (preferenceStore.contains(MACHINE_PROPERTY))
88 return Optional.of(preferenceStore.getString(MACHINE_PROPERTY));
89 return Optional.empty();