diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/WorkingSetTaskImpl.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/WorkingSetTaskImpl.java | 289 |
1 files changed, 289 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/WorkingSetTaskImpl.java b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/WorkingSetTaskImpl.java new file mode 100644 index 0000000000..c45a4b1f7b --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.releng.setup/src/org/eclipse/emf/cdo/releng/setup/impl/WorkingSetTaskImpl.java @@ -0,0 +1,289 @@ +/** + */ +package org.eclipse.emf.cdo.releng.setup.impl; + +import org.eclipse.emf.cdo.releng.internal.setup.Activator; +import org.eclipse.emf.cdo.releng.setup.Branch; +import org.eclipse.emf.cdo.releng.setup.Preferences; +import org.eclipse.emf.cdo.releng.setup.Project; +import org.eclipse.emf.cdo.releng.setup.SetupPackage; +import org.eclipse.emf.cdo.releng.setup.SetupTaskContext; +import org.eclipse.emf.cdo.releng.setup.Trigger; +import org.eclipse.emf.cdo.releng.setup.WorkingSetTask; +import org.eclipse.emf.cdo.releng.workingsets.WorkingSet; +import org.eclipse.emf.cdo.releng.workingsets.WorkingSetGroup; +import org.eclipse.emf.cdo.releng.workingsets.util.WorkingSetsUtil; + +import org.eclipse.emf.common.notify.NotificationChain; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.InternalEObject; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.util.EObjectContainmentEList; +import org.eclipse.emf.ecore.util.InternalEList; + +import org.eclipse.ui.IViewPart; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + +/** + * <!-- begin-user-doc --> + * An implementation of the model object '<em><b>Set Working Task</b></em>'. + * <!-- end-user-doc --> + * <p> + * The following features are implemented: + * <ul> + * <li>{@link org.eclipse.emf.cdo.releng.setup.impl.WorkingSetTaskImpl#getWorkingSets <em>Working Sets</em>}</li> + * </ul> + * </p> + * + * @generated + */ +public class WorkingSetTaskImpl extends SetupTaskImpl implements WorkingSetTask +{ + /** + * The cached value of the '{@link #getWorkingSets() <em>Working Sets</em>}' containment reference list. + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @see #getWorkingSets() + * @generated + * @ordered + */ + protected EList<WorkingSet> workingSets; + + private static final String PACKAGE_EXPLORER_ID = "org.eclipse.jdt.ui.PackageExplorer"; + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + protected WorkingSetTaskImpl() + { + super(); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + protected EClass eStaticClass() + { + return SetupPackage.Literals.WORKING_SET_TASK; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + public EList<WorkingSet> getWorkingSets() + { + if (workingSets == null) + { + workingSets = new EObjectContainmentEList.Resolving<WorkingSet>(WorkingSet.class, this, + SetupPackage.WORKING_SET_TASK__WORKING_SETS); + } + return workingSets; + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs) + { + switch (featureID) + { + case SetupPackage.WORKING_SET_TASK__WORKING_SETS: + return ((InternalEList<?>)getWorkingSets()).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 SetupPackage.WORKING_SET_TASK__WORKING_SETS: + return getWorkingSets(); + } + 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 SetupPackage.WORKING_SET_TASK__WORKING_SETS: + getWorkingSets().clear(); + getWorkingSets().addAll((Collection<? extends WorkingSet>)newValue); + return; + } + super.eSet(featureID, newValue); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public void eUnset(int featureID) + { + switch (featureID) + { + case SetupPackage.WORKING_SET_TASK__WORKING_SETS: + getWorkingSets().clear(); + return; + } + super.eUnset(featureID); + } + + /** + * <!-- begin-user-doc --> + * <!-- end-user-doc --> + * @generated + */ + @Override + public boolean eIsSet(int featureID) + { + switch (featureID) + { + case SetupPackage.WORKING_SET_TASK__WORKING_SETS: + return workingSets != null && !workingSets.isEmpty(); + } + return super.eIsSet(featureID); + } + + @Override + public Set<Trigger> getValidTriggers() + { + return Trigger.IDE_TRIGGERS; + } + + public boolean isNeeded(SetupTaskContext context) throws Exception + { + WorkingSetGroup defaultWorkingSetGroup = WorkingSetsUtil.getWorkingSetGroup(); + Set<String> existingIds = new HashSet<String>(); + for (WorkingSet workingSet : defaultWorkingSetGroup.getWorkingSets()) + { + existingIds.add(workingSet.getId()); + } + + String prefix = ""; + for (EObject eContainer = eContainer(); eContainer != null; eContainer = eContainer.eContainer()) + { + if (eContainer instanceof Project) + { + prefix += ((Project)eContainer).getName() + " "; + } + else if (eContainer instanceof Branch) + { + prefix += ((Branch)eContainer).getName() + " "; + } + else if (eContainer instanceof Preferences) + { + prefix += ((Preferences)eContainer).getUserName() + " "; + } + } + + Set<String> newIds = new HashSet<String>(); + for (WorkingSet workingSet : getWorkingSets()) + { + String id = prefix + workingSet.getName(); + workingSet.setId(id); + newIds.add(id); + } + + return !existingIds.containsAll(newIds); + } + + public void perform(SetupTaskContext context) throws Exception + { + initPackageExplorer(); + + WorkingSetGroup defaultWorkingSetGroup = WorkingSetsUtil.getWorkingSetGroup(); + Set<String> existingIds = new HashSet<String>(); + EList<WorkingSet> workingSets = defaultWorkingSetGroup.getWorkingSets(); + for (WorkingSet workingSet : workingSets) + { + existingIds.add(workingSet.getId()); + } + + EList<WorkingSet> newWorkingSetGroups = getWorkingSets(); + int index = 0; + for (WorkingSet workingSet : new ArrayList<WorkingSet>(newWorkingSetGroups)) + { + String id = workingSet.getId(); + if (!existingIds.contains(id)) + { + workingSets.add(index++, workingSet); + } + else + { + for (int i = 0, size = workingSets.size(); i < size; ++i) + { + if (id.equals(workingSets.get(i).getId())) + { + index = i + 1; + break; + } + } + } + } + + Resource resource = defaultWorkingSetGroup.eResource(); + resource.save(null); + } + + private static void initPackageExplorer() + { + final IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getWorkbenchWindows()[0]; + workbenchWindow.getShell().getDisplay().asyncExec(new Runnable() + { + public void run() + { + try + { + IViewPart view = workbenchWindow.getActivePage().showView(PACKAGE_EXPLORER_ID, null, + IWorkbenchPage.VIEW_CREATE); + if (view != null) + { + Method method = view.getClass().getMethod("rootModeChanged", int.class); + method.invoke(view, 2); + } + } + catch (Exception ex) + { + Activator.log(ex); + } + } + }); + } +} // SetWorkingTaskImpl |