Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.releng.projectconfig/src/org/eclipse/emf/cdo/releng/projectconfig/impl/WorkspaceConfigurationImpl.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.releng.projectconfig/src/org/eclipse/emf/cdo/releng/projectconfig/impl/WorkspaceConfigurationImpl.java535
1 files changed, 535 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.projectconfig/src/org/eclipse/emf/cdo/releng/projectconfig/impl/WorkspaceConfigurationImpl.java b/plugins/org.eclipse.emf.cdo.releng.projectconfig/src/org/eclipse/emf/cdo/releng/projectconfig/impl/WorkspaceConfigurationImpl.java
new file mode 100644
index 0000000000..3004290775
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.releng.projectconfig/src/org/eclipse/emf/cdo/releng/projectconfig/impl/WorkspaceConfigurationImpl.java
@@ -0,0 +1,535 @@
+/**
+ */
+package org.eclipse.emf.cdo.releng.projectconfig.impl;
+
+import org.eclipse.emf.cdo.releng.predicates.Predicate;
+import org.eclipse.emf.cdo.releng.preferences.PreferenceNode;
+import org.eclipse.emf.cdo.releng.preferences.util.PreferencesUtil;
+import org.eclipse.emf.cdo.releng.projectconfig.PreferenceFilter;
+import org.eclipse.emf.cdo.releng.projectconfig.PreferenceProfile;
+import org.eclipse.emf.cdo.releng.projectconfig.Project;
+import org.eclipse.emf.cdo.releng.projectconfig.ProjectConfigPackage;
+import org.eclipse.emf.cdo.releng.projectconfig.WorkspaceConfiguration;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.common.util.ECollections;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+import org.eclipse.emf.ecore.util.EObjectContainmentWithInverseEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Workspace Configuration</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ * <li>{@link org.eclipse.emf.cdo.releng.projectconfig.impl.WorkspaceConfigurationImpl#getProjects <em>Projects</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.releng.projectconfig.impl.WorkspaceConfigurationImpl#getDefaultPreferenceNode <em>Default Preference Node</em>}</li>
+ * <li>{@link org.eclipse.emf.cdo.releng.projectconfig.impl.WorkspaceConfigurationImpl#getInstancePreferenceNode <em>Instance Preference Node</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class WorkspaceConfigurationImpl extends MinimalEObjectImpl.Container implements WorkspaceConfiguration
+{
+ private static final IWorkspaceRoot WORKSPACE_ROOT = ResourcesPlugin.getWorkspace().getRoot();
+
+ /**
+ * The cached value of the '{@link #getProjects() <em>Projects</em>}' containment reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getProjects()
+ * @generated
+ * @ordered
+ */
+ protected EList<Project> projects;
+
+ /**
+ * The cached value of the '{@link #getDefaultPreferenceNode() <em>Default Preference Node</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getDefaultPreferenceNode()
+ * @generated
+ * @ordered
+ */
+ protected PreferenceNode defaultPreferenceNode;
+
+ /**
+ * The cached value of the '{@link #getInstancePreferenceNode() <em>Instance Preference Node</em>}' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see #getInstancePreferenceNode()
+ * @generated
+ * @ordered
+ */
+ protected PreferenceNode instancePreferenceNode;
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected WorkspaceConfigurationImpl()
+ {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass()
+ {
+ return ProjectConfigPackage.Literals.WORKSPACE_CONFIGURATION;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public EList<Project> getProjects()
+ {
+ if (projects == null)
+ {
+ projects = new EObjectContainmentWithInverseEList<Project>(Project.class, this, ProjectConfigPackage.WORKSPACE_CONFIGURATION__PROJECTS, ProjectConfigPackage.PROJECT__CONFIGURATION);
+ }
+ return projects;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public PreferenceNode getDefaultPreferenceNode()
+ {
+ if (defaultPreferenceNode != null && defaultPreferenceNode.eIsProxy())
+ {
+ InternalEObject oldDefaultPreferenceNode = (InternalEObject)defaultPreferenceNode;
+ defaultPreferenceNode = (PreferenceNode)eResolveProxy(oldDefaultPreferenceNode);
+ if (defaultPreferenceNode != oldDefaultPreferenceNode)
+ {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProjectConfigPackage.WORKSPACE_CONFIGURATION__DEFAULT_PREFERENCE_NODE, oldDefaultPreferenceNode, defaultPreferenceNode));
+ }
+ }
+ return defaultPreferenceNode;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public PreferenceNode basicGetDefaultPreferenceNode()
+ {
+ return defaultPreferenceNode;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setDefaultPreferenceNode(PreferenceNode newDefaultPreferenceNode)
+ {
+ PreferenceNode oldDefaultPreferenceNode = defaultPreferenceNode;
+ defaultPreferenceNode = newDefaultPreferenceNode;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ProjectConfigPackage.WORKSPACE_CONFIGURATION__DEFAULT_PREFERENCE_NODE, oldDefaultPreferenceNode, defaultPreferenceNode));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public PreferenceNode getInstancePreferenceNode()
+ {
+ if (instancePreferenceNode != null && instancePreferenceNode.eIsProxy())
+ {
+ InternalEObject oldInstancePreferenceNode = (InternalEObject)instancePreferenceNode;
+ instancePreferenceNode = (PreferenceNode)eResolveProxy(oldInstancePreferenceNode);
+ if (instancePreferenceNode != oldInstancePreferenceNode)
+ {
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.RESOLVE, ProjectConfigPackage.WORKSPACE_CONFIGURATION__INSTANCE_PREFERENCE_NODE, oldInstancePreferenceNode, instancePreferenceNode));
+ }
+ }
+ return instancePreferenceNode;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public PreferenceNode basicGetInstancePreferenceNode()
+ {
+ return instancePreferenceNode;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public void setInstancePreferenceNode(PreferenceNode newInstancePreferenceNode)
+ {
+ PreferenceNode oldInstancePreferenceNode = instancePreferenceNode;
+ instancePreferenceNode = newInstancePreferenceNode;
+ if (eNotificationRequired())
+ eNotify(new ENotificationImpl(this, Notification.SET, ProjectConfigPackage.WORKSPACE_CONFIGURATION__INSTANCE_PREFERENCE_NODE, oldInstancePreferenceNode, instancePreferenceNode));
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public void applyPreferenceProfiles()
+ {
+ for (Project project : getProjects())
+ {
+ try
+ {
+ Preferences projectPreferences = PreferencesUtil.getPreferences(project.getPreferenceNode(), true);
+
+ Set<Preferences> clearedPreferences = new HashSet<Preferences>();
+ for (PreferenceProfile preferenceProfile : project.getPreferenceProfileReferences())
+ {
+ if (preferenceProfile.getProject() != project)
+ {
+ for (PreferenceFilter preferenceFilter : preferenceProfile.getPreferenceFilters())
+ {
+ PreferenceNode preferenceNode = preferenceFilter.getPreferenceNode();
+ try
+ {
+ Preferences sourcePreferences = PreferencesUtil.getPreferences(preferenceNode, true);
+ if (projectPreferences == null)
+ {
+ projectPreferences = PreferencesUtil.getPreferences(project.getPreferenceNode(), true);
+ }
+ Preferences targetPreferences = projectPreferences.node(sourcePreferences.name());
+ if (clearedPreferences.add(targetPreferences))
+ {
+ targetPreferences.clear();
+ }
+ for (String key : sourcePreferences.keys())
+ {
+ if (preferenceFilter.matches(key))
+ {
+ targetPreferences.put(key, sourcePreferences.get(key, null));
+ }
+ }
+ }
+ catch (BackingStoreException ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+ }
+ }
+
+ if (!clearedPreferences.isEmpty())
+ {
+ for (Preferences preferences : clearedPreferences)
+ {
+ if (preferences.keys().length == 0)
+ {
+ preferences.removeNode();
+ }
+ }
+
+ projectPreferences.flush();
+ }
+ }
+ catch (BackingStoreException ex1)
+ {
+ ex1.printStackTrace();
+ }
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ public void updatePreferenceProfileReferences()
+ {
+ boolean sort = false;
+ for (Project project : getProjects())
+ {
+ for (PreferenceProfile preferenceProfile : project.getPreferenceProfiles())
+ {
+ if (!preferenceProfile.getPrerequisites().isEmpty())
+ {
+ sort = true;
+ }
+
+ EList<Predicate> predicates = preferenceProfile.getPredicates();
+ if (!predicates.isEmpty())
+ {
+ List<Project> referents = new ArrayList<Project>();
+ for (Predicate predicate : predicates)
+ {
+ for (Project referencedProject : getProjects())
+ {
+ IProject iProject = WORKSPACE_ROOT.getProject(referencedProject.getPreferenceNode().getName());
+ if (iProject.isAccessible())
+ {
+ if (predicate.matches(iProject))
+ {
+ referents.add(referencedProject);
+ }
+ }
+ }
+ }
+ ECollections.setEList(preferenceProfile.getReferentProjects(), referents);
+ }
+ }
+ }
+
+ if (sort)
+ {
+ for (Project project : getProjects())
+ {
+ ECollections.sort(project.getPreferenceProfileReferences(), new Comparator<PreferenceProfile>()
+ {
+ public int compare(PreferenceProfile p1, PreferenceProfile p2)
+ {
+ if (p2.requires(p1))
+ {
+ if (!p1.requires(p2))
+ {
+ return -1;
+ }
+ }
+ else if (p1.requires(p2))
+ {
+ return 1;
+ }
+ return p1.getName().compareTo(p2.getName());
+ }
+ });
+ }
+ }
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION__PROJECTS:
+ return ((InternalEList<InternalEObject>)(InternalEList<?>)getProjects()).basicAdd(otherEnd, msgs);
+ }
+ return super.eInverseAdd(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+ {
+ switch (featureID)
+ {
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION__PROJECTS:
+ return ((InternalEList<?>)getProjects()).basicRemove(otherEnd, msgs);
+ }
+ return super.eInverseRemove(otherEnd, featureID, msgs);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eGet(int featureID, boolean resolve, boolean coreType)
+ {
+ switch (featureID)
+ {
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION__PROJECTS:
+ return getProjects();
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION__DEFAULT_PREFERENCE_NODE:
+ if (resolve) return getDefaultPreferenceNode();
+ return basicGetDefaultPreferenceNode();
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION__INSTANCE_PREFERENCE_NODE:
+ if (resolve) return getInstancePreferenceNode();
+ return basicGetInstancePreferenceNode();
+ }
+ return super.eGet(featureID, resolve, coreType);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public void eSet(int featureID, Object newValue)
+ {
+ switch (featureID)
+ {
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION__PROJECTS:
+ getProjects().clear();
+ getProjects().addAll((Collection<? extends Project>)newValue);
+ return;
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION__DEFAULT_PREFERENCE_NODE:
+ setDefaultPreferenceNode((PreferenceNode)newValue);
+ return;
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION__INSTANCE_PREFERENCE_NODE:
+ setInstancePreferenceNode((PreferenceNode)newValue);
+ return;
+ }
+ super.eSet(featureID, newValue);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void eUnset(int featureID)
+ {
+ switch (featureID)
+ {
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION__PROJECTS:
+ getProjects().clear();
+ return;
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION__DEFAULT_PREFERENCE_NODE:
+ setDefaultPreferenceNode((PreferenceNode)null);
+ return;
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION__INSTANCE_PREFERENCE_NODE:
+ setInstancePreferenceNode((PreferenceNode)null);
+ return;
+ }
+ super.eUnset(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public boolean eIsSet(int featureID)
+ {
+ switch (featureID)
+ {
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION__PROJECTS:
+ return projects != null && !projects.isEmpty();
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION__DEFAULT_PREFERENCE_NODE:
+ return defaultPreferenceNode != null;
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION__INSTANCE_PREFERENCE_NODE:
+ return instancePreferenceNode != null;
+ }
+ return super.eIsSet(featureID);
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object eInvoke(int operationID, EList<?> arguments) throws InvocationTargetException
+ {
+ switch (operationID)
+ {
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION___APPLY_PREFERENCE_PROFILES:
+ applyPreferenceProfiles();
+ return null;
+ case ProjectConfigPackage.WORKSPACE_CONFIGURATION___UPDATE_PREFERENCE_PROFILE_REFERENCES:
+ updatePreferenceProfileReferences();
+ return null;
+ }
+ return super.eInvoke(operationID, arguments);
+ }
+
+ @Override
+ public String eURIFragmentSegment(EStructuralFeature eStructuralFeature, EObject eObject)
+ {
+ if (eStructuralFeature == ProjectConfigPackage.Literals.WORKSPACE_CONFIGURATION__PROJECTS)
+ {
+ Project child = (Project)eObject;
+ PreferenceNode preferenceNode = child.getPreferenceNode();
+ if (preferenceNode != null)
+ {
+ String name = preferenceNode.getName();
+ if (name != null)
+ {
+ String encodedName = URI.encodeSegment(name, false);
+ if (encodedName.startsWith("@"))
+ {
+ encodedName = "%40" + encodedName.substring(1);
+ }
+ return name;
+ }
+ }
+ }
+
+ return super.eURIFragmentSegment(eStructuralFeature, eObject);
+ }
+
+ @Override
+ public EObject eObjectForURIFragmentSegment(String uriFragmentSegment)
+ {
+ if (!uriFragmentSegment.startsWith("@"))
+ {
+ String preferenceNodeName = URI.decode(uriFragmentSegment);
+ for (Project project : getProjects())
+ {
+ PreferenceNode preferenceNode = project.getPreferenceNode();
+ if (preferenceNode != null && preferenceNodeName.equals(preferenceNode.getName()))
+ {
+ return project;
+ }
+ }
+ return null;
+ }
+ return super.eObjectForURIFragmentSegment(uriFragmentSegment);
+ }
+
+} // WorkspaceConfigurationImpl

Back to the top