Java tutorial
/** * Copyright 2012-2017 Kyrill Zotkin * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.enterprisedomain.classmaker.impl; import java.io.File; import java.io.IOException; import java.util.Collections; import java.util.Date; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.ListenerList; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.MultiRule; import org.eclipse.emf.codegen.util.CodeGenUtil; import org.eclipse.emf.common.notify.Adapter; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; import org.eclipse.emf.common.notify.impl.AdapterImpl; import org.eclipse.emf.common.notify.impl.NotificationImpl; import org.eclipse.emf.common.util.ECollections; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.EMap; 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.EObjectImpl; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.util.EcoreEMap; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.ecore.util.InternalEList; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.ResetCommand; import org.eclipse.jgit.api.ResetCommand.ResetType; import org.eclipse.jgit.api.errors.CheckoutConflictException; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.Ref; import org.eclipse.osgi.util.NLS; import org.enterprisedomain.classmaker.ClassMakerFactory; import org.enterprisedomain.classmaker.ClassMakerPackage; import org.enterprisedomain.classmaker.CompletionListener; import org.enterprisedomain.classmaker.CompletionNotificationAdapter; import org.enterprisedomain.classmaker.Messages; import org.enterprisedomain.classmaker.Project; import org.enterprisedomain.classmaker.ResourceChangeListener; import org.enterprisedomain.classmaker.Revision; import org.enterprisedomain.classmaker.SCMOperator; import org.enterprisedomain.classmaker.SelectRevealHandler; import org.enterprisedomain.classmaker.State; import org.enterprisedomain.classmaker.Workspace; import org.enterprisedomain.classmaker.core.ClassMakerPlugin; import org.enterprisedomain.classmaker.util.ListUtil; import org.enterprisedomain.classmaker.util.ResourceUtils; import org.osgi.framework.Version; /** * <!-- begin-user-doc --> An implementation of the model object ' * <em><b>Project</b></em>'. <!-- end-user-doc --> * <p> * The following features are implemented: * </p> * <ul> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#getName * <em>Name</em>}</li> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#getProjectName * <em>Project Name</em>}</li> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#getChildren * <em>Children</em>}</li> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#isDirty * <em>Dirty</em>}</li> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#getWorkspace * <em>Workspace</em>}</li> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#getResourcePath * <em>Resource Path</em>}</li> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#isNeedCompletionNotification * <em>Need Completion Notification</em>}</li> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#getCompletionNotificationAdapter * <em>Completion Notification Adapter</em>}</li> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#getResourceReloadListener * <em>Resource Reload Listener</em>}</li> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#isSavingResource * <em>Saving Resource</em>}</li> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#getRevision * <em>Revision</em>}</li> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#getRevisions * <em>Revisions</em>}</li> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#getProjectVersion * <em>Project Version</em>}</li> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#getSelectRevealHandler * <em>Select Reveal Handler</em>}</li> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#getVersion * <em>Version</em>}</li> * <li>{@link org.enterprisedomain.classmaker.impl.ProjectImpl#getState * <em>State</em>}</li> * </ul> * * @generated */ public class ProjectImpl extends EObjectImpl implements Project { /** * The default value of the '{@link #getName() <em>Name</em>}' attribute. <!-- * begin-user-doc --> <!-- end-user-doc --> * * @see #getName() * @generated * @ordered */ protected static final String NAME_EDEFAULT = ""; /** * The cached value of the '{@link #getName() <em>Name</em>}' attribute. <!-- * begin-user-doc --> <!-- end-user-doc --> * * @see #getName() * @generated * @ordered */ protected String name = NAME_EDEFAULT; /** * The default value of the '{@link #getProjectName() <em>Project Name</em>}' * attribute. <!-- begin-user-doc --> <!-- end-user-doc --> * * @see #getProjectName() * @generated * @ordered */ protected static final String PROJECT_NAME_EDEFAULT = ""; /** * The cached value of the '{@link #getProjectName() <em>Project Name</em>}' * attribute. <!-- begin-user-doc --> <!-- end-user-doc --> * * @see #getProjectName() * @generated * @ordered */ protected String projectName = PROJECT_NAME_EDEFAULT; /** * The default value of the '{@link #isDirty() <em>Dirty</em>}' attribute. <!-- * begin-user-doc --> <!-- end-user-doc --> * * @see #isDirty() * @generated * @ordered */ protected static final boolean DIRTY_EDEFAULT = false; /** * The default value of the '{@link #getResourcePath() <em>Resource Path</em>}' * attribute. <!-- begin-user-doc --> <!-- end-user-doc --> * * @see #getResourcePath() * @generated * @ordered */ protected static final String RESOURCE_PATH_EDEFAULT = null; /** * The default value of the '{@link #isNeedCompletionNotification() <em>Need * Completion Notification</em>}' attribute. <!-- begin-user-doc --> <!-- * end-user-doc --> * * @see #isNeedCompletionNotification() * @generated * @ordered */ protected static final boolean NEED_COMPLETION_NOTIFICATION_EDEFAULT = false; /** * The cached value of the '{@link #isNeedCompletionNotification() <em>Need * Completion Notification</em>}' attribute. <!-- begin-user-doc --> <!-- * end-user-doc --> * * @see #isNeedCompletionNotification() * @generated * @ordered */ protected boolean needCompletionNotification = NEED_COMPLETION_NOTIFICATION_EDEFAULT; /** * The cached value of the '{@link #getCompletionNotificationAdapter() * <em>Completion Notification Adapter</em>}' containment reference. <!-- * begin-user-doc --> <!-- end-user-doc --> * * @see #getCompletionNotificationAdapter() * @generated * @ordered */ protected CompletionNotificationAdapter completionNotificationAdapter; /** * The cached value of the '{@link #getResourceReloadListener() <em>Resource * Reload Listener</em>}' reference. <!-- begin-user-doc --> <!-- end-user-doc * --> * * @see #getResourceReloadListener() * @generated * @ordered */ protected ResourceChangeListener resourceReloadListener; /** * The default value of the '{@link #isSavingResource() <em>Saving * Resource</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc --> * * @see #isSavingResource() * @generated * @ordered */ protected static final boolean SAVING_RESOURCE_EDEFAULT = false; /** * The cached value of the '{@link #isSavingResource() <em>Saving * Resource</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc --> * * @see #isSavingResource() * @generated * @ordered */ protected boolean savingResource = SAVING_RESOURCE_EDEFAULT; /** * The cached value of the '{@link #getRevisions() <em>Revisions</em>}' map. * <!-- begin-user-doc --> <!-- end-user-doc --> * * @see #getRevisions() * @generated * @ordered */ protected EMap<Version, Revision> revisions; /** * The default value of the '{@link #getProjectVersion() <em>Project * Version</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc --> * * @see #getProjectVersion() * @generated * @ordered */ protected static final Version PROJECT_VERSION_EDEFAULT = null; /** * The cached value of the '{@link #getProjectVersion() <em>Project * Version</em>}' attribute. <!-- begin-user-doc --> <!-- end-user-doc --> * * @see #getProjectVersion() * @generated * @ordered */ protected Version projectVersion = PROJECT_VERSION_EDEFAULT; /** * The cached value of the '{@link #getSelectRevealHandler() <em>Select Reveal * Handler</em>}' reference. <!-- begin-user-doc --> <!-- end-user-doc --> * * @see #getSelectRevealHandler() * @generated * @ordered */ protected SelectRevealHandler selectRevealHandler; /** * The default value of the '{@link #getVersion() <em>Version</em>}' attribute. * <!-- begin-user-doc --> <!-- end-user-doc --> * * @see #getVersion() * @generated * @ordered */ protected static final Version VERSION_EDEFAULT = null; /** * The cached value of the '{@link #getVersion() <em>Version</em>}' attribute. * <!-- begin-user-doc --> <!-- end-user-doc --> * * @see #getVersion() * @generated * @ordered */ protected Version version = VERSION_EDEFAULT; protected ListenerList<CompletionListener> completionListeners = new ListenerList<CompletionListener>(); protected ListenerList<ResourceChangeListener> resourceChangeListeners = new ListenerList<ResourceChangeListener>(); protected EList<Object> children = ECollections.newBasicEList(); protected ResourceChangeAdapter resourceAdapter = new ResourceChangeAdapter(this); public class ProjectNameAdapter extends AdapterImpl { @Override public void notifyChanged(Notification msg) { if (msg.getFeatureID(State.class) == ClassMakerPackage.PROJECT__NAME && msg.getEventType() == Notification.SET && msg.getNewStringValue() != null && eIsSet(ClassMakerPackage.PROJECT__WORKSPACE)) setProjectName(getWorkspace().getService().computeProjectName(msg.getNewStringValue())); } } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ protected ProjectImpl() { super(); setCompletionNotificationAdapter(ClassMakerFactory.eINSTANCE.createCompletionNotificationAdapter()); eAdapters().add(getCompletionNotificationAdapter()); eAdapters().add(new ProjectNameAdapter()); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override protected EClass eStaticClass() { return ClassMakerPackage.Literals.PROJECT; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public String getName() { return name; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void setName(String newName) { String oldName = name; name = newName; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ClassMakerPackage.PROJECT__NAME, oldName, name)); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public String getProjectName() { return projectName; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void setProjectName(String newProjectName) { String oldProjectName = projectName; projectName = CodeGenUtil.safeName(newProjectName); if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ClassMakerPackage.PROJECT__PROJECT_NAME, oldProjectName, projectName)); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ @SuppressWarnings("unchecked") public EList<Object> getChildren() { if (eIsSet(ClassMakerPackage.Literals.PROJECT__REVISION) && getRevision().eIsSet(ClassMakerPackage.Literals.REVISION__STATE)) { if (children.isEmpty()) children.add(getRevision().getState().getResource()); else children.set(0, getRevision().getState().getResource()); } return children; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public boolean isDirty() { boolean result = true; for (Object child : getChildren()) if (child instanceof Resource) { result &= ((Resource) child).isModified(); } else if (child instanceof EObject) { result &= ((EObject) child).eResource().isModified(); } return result; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public Workspace getWorkspace() { if (eContainerFeatureID() != ClassMakerPackage.PROJECT__WORKSPACE) return null; return (Workspace) eInternalContainer(); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ public NotificationChain basicSetWorkspace(Workspace newWorkspace, NotificationChain msgs) { msgs = eBasicSetContainer((InternalEObject) newWorkspace, ClassMakerPackage.PROJECT__WORKSPACE, msgs); return msgs; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void setWorkspace(Workspace newWorkspace) { if (newWorkspace != eInternalContainer() || (eContainerFeatureID() != ClassMakerPackage.PROJECT__WORKSPACE && newWorkspace != null)) { if (EcoreUtil.isAncestor(this, newWorkspace)) throw new IllegalArgumentException("Recursive containment not allowed for " + toString()); NotificationChain msgs = null; if (eInternalContainer() != null) msgs = eBasicRemoveFromContainer(msgs); if (newWorkspace != null) msgs = ((InternalEObject) newWorkspace).eInverseAdd(this, ClassMakerPackage.WORKSPACE__PROJECTS, Workspace.class, msgs); msgs = basicSetWorkspace(newWorkspace, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ClassMakerPackage.PROJECT__WORKSPACE, newWorkspace, newWorkspace)); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public String getResourcePath() { return IPath.SEPARATOR + getProjectName() + IPath.SEPARATOR + ResourceUtils.getFileName(getName()); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public boolean isNeedCompletionNotification() { return needCompletionNotification; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void setNeedCompletionNotification(boolean newNeedCompletionNotification) { boolean oldNeedCompletionNotification = needCompletionNotification; needCompletionNotification = newNeedCompletionNotification; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ClassMakerPackage.PROJECT__NEED_COMPLETION_NOTIFICATION, oldNeedCompletionNotification, needCompletionNotification)); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public CompletionNotificationAdapter getCompletionNotificationAdapter() { return completionNotificationAdapter; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ public NotificationChain basicSetCompletionNotificationAdapter( CompletionNotificationAdapter newCompletionNotificationAdapter, NotificationChain msgs) { CompletionNotificationAdapter oldCompletionNotificationAdapter = completionNotificationAdapter; completionNotificationAdapter = newCompletionNotificationAdapter; if (eNotificationRequired()) { ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, ClassMakerPackage.PROJECT__COMPLETION_NOTIFICATION_ADAPTER, oldCompletionNotificationAdapter, newCompletionNotificationAdapter); if (msgs == null) msgs = notification; else msgs.add(notification); } return msgs; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void setCompletionNotificationAdapter(CompletionNotificationAdapter newCompletionNotificationAdapter) { if (newCompletionNotificationAdapter != completionNotificationAdapter) { NotificationChain msgs = null; if (completionNotificationAdapter != null) msgs = ((InternalEObject) completionNotificationAdapter).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - ClassMakerPackage.PROJECT__COMPLETION_NOTIFICATION_ADAPTER, null, msgs); if (newCompletionNotificationAdapter != null) msgs = ((InternalEObject) newCompletionNotificationAdapter).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - ClassMakerPackage.PROJECT__COMPLETION_NOTIFICATION_ADAPTER, null, msgs); msgs = basicSetCompletionNotificationAdapter(newCompletionNotificationAdapter, msgs); if (msgs != null) msgs.dispatch(); } else if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ClassMakerPackage.PROJECT__COMPLETION_NOTIFICATION_ADAPTER, newCompletionNotificationAdapter, newCompletionNotificationAdapter)); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public ResourceChangeListener getResourceReloadListener() { if (resourceReloadListener == null) { resourceReloadListener = new ResourceChangeListenerImpl() { private boolean loading = false; @Override public void changed(Notification notification) throws Exception { Resource theResource = (Resource) getChildren().get(0); Resource resource = (Resource) notification.getNotifier(); if (!loading && !isSavingResource() && resource.getURI().equals(theResource.getURI()) && !theResource.isModified() && theResource.isLoaded()) { loading = true; if (ProjectImpl.this.eIsSet(ClassMakerPackage.PROJECT__SELECT_REVEAL_HANDLER)) getSelectRevealHandler().prepare(); setResource(resource); theResource = ((Resource) getChildren().get(0)); // theResource.setURI(getResourceURI()); // theResource.unload(); // theResource.load(Collections.emptyMap()); if (ProjectImpl.this.eIsSet(ClassMakerPackage.PROJECT__SELECT_REVEAL_HANDLER)) getSelectRevealHandler().selectReveal(theResource); loading = false; } } }; } return resourceReloadListener; } protected void setResource(Resource resource) { getRevision().getState().setResource(resource); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public boolean isSavingResource() { return savingResource; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void setSavingResource(boolean newSavingResource) { boolean oldSavingResource = savingResource; savingResource = newSavingResource; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ClassMakerPackage.PROJECT__SAVING_RESOURCE, oldSavingResource, savingResource)); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public Revision getRevision() { Revision revision = basicGetRevision(); return revision != null && revision.eIsProxy() ? (Revision) eResolveProxy((InternalEObject) revision) : revision; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public Revision basicGetRevision() { return getRevisions().get(getProjectVersion()); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void setRevision(Revision newRevision) { if (!getRevisions().containsKey(newRevision.getVersion())) getRevisions().put(newRevision.getVersion(), newRevision); setProjectVersion(newRevision.getVersion()); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public EMap<Version, Revision> getRevisions() { if (revisions == null) { revisions = new EcoreEMap<Version, Revision>(ClassMakerPackage.Literals.VERSION_TO_REVISION_MAP_ENTRY, VersionToRevisionMapEntryImpl.class, this, ClassMakerPackage.PROJECT__REVISIONS); } return revisions; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public Version getProjectVersion() { return projectVersion; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void setProjectVersion(Version newProjectVersion) { Version oldProjectVersion = projectVersion; projectVersion = newProjectVersion; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ClassMakerPackage.PROJECT__PROJECT_VERSION, oldProjectVersion, projectVersion)); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public SelectRevealHandler getSelectRevealHandler() { if (selectRevealHandler != null && selectRevealHandler.eIsProxy()) { InternalEObject oldSelectRevealHandler = (InternalEObject) selectRevealHandler; selectRevealHandler = (SelectRevealHandler) eResolveProxy(oldSelectRevealHandler); if (selectRevealHandler != oldSelectRevealHandler) { if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.RESOLVE, ClassMakerPackage.PROJECT__SELECT_REVEAL_HANDLER, oldSelectRevealHandler, selectRevealHandler)); } } return selectRevealHandler; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ public SelectRevealHandler basicGetSelectRevealHandler() { return selectRevealHandler; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void setSelectRevealHandler(SelectRevealHandler newSelectRevealHandler) { SelectRevealHandler oldSelectRevealHandler = selectRevealHandler; selectRevealHandler = newSelectRevealHandler; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ClassMakerPackage.PROJECT__SELECT_REVEAL_HANDLER, oldSelectRevealHandler, selectRevealHandler)); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public Version getVersion() { return version; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void setVersion(Version newVersion) { Version oldVersion = version; version = newVersion; if (eNotificationRequired()) eNotify(new ENotificationImpl(this, Notification.SET, ClassMakerPackage.PROJECT__VERSION, oldVersion, version)); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public State getState() { State state = basicGetState(); return state != null && state.eIsProxy() ? (State) eResolveProxy((InternalEObject) state) : state; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public State basicGetState() { return getRevision().getState(); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void create(IProgressMonitor monitor) throws CoreException { IWorkspace workspace = ResourcesPlugin.getWorkspace(); String projectName = getProjectName(); IProject project = workspace.getRoot().getProject(projectName); ResourceUtils.createProject(project, null, monitor); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void delete(IProgressMonitor monitor) throws CoreException { if (eIsSet(ClassMakerPackage.PROJECT__WORKSPACE)) { getWorkspace().getResourceSet().eAdapters().remove(resourceAdapter); getWorkspace().unregisterProject(this); } String projectName = getProjectName(); if (projectName.isEmpty()) return; IWorkspace workspace = ResourcesPlugin.getWorkspace(); IProject project = workspace.getRoot().getProject(projectName); SubMonitor pm = SubMonitor.convert(monitor); SubMonitor m = pm.newChild(1, SubMonitor.SUPPRESS_ISCANCELED); try { project.delete(true, true, m); } finally { m.done(); pm.done(); } } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void delete(EList<Object> objects) { ((Resource) getChildren().get(0)).getContents().removeAll(objects); try { ((Resource) getChildren().get(0)).save(Collections.emptyMap()); } catch (IOException e) { ClassMakerPlugin.getInstance().getLog().log(ClassMakerPlugin.createErrorStatus(e)); } } public void notifyCompletion() throws Exception { for (Object listener : completionListeners.getListeners()) ((CompletionListener) listener).completed(this); setNeedCompletionNotification(false); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void addResourceChangeListener(ResourceChangeListener resourceListener) { resourceChangeListeners.add(resourceListener); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void removeResourceChangeListener(ResourceChangeListener resourceListener) { resourceChangeListeners.remove(resourceListener); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public Revision newRevision(Version version) { if (getRevisions().containsKey(version)) return getRevisions().get(version); Revision newRevision = newBareRevision(version); doNewRevision(newRevision); newRevision.initialize(false); return newRevision; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public Revision newBareRevision(Version version) { Revision newRevision = ClassMakerFactory.eINSTANCE.createRevision(); newRevision.setVersion(version); getRevisions().put(version, newRevision); return newRevision; } /** * <!-- begin-user-doc --> Sub-classes may implement. <!-- end-user-doc --> * * @generated NOT */ public void doNewRevision(Revision newRevision) { State newState = newRevision.newState(); newRevision.setTimestamp(newState.getTimestamp()); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public Version newVersion(boolean incrementMajor, boolean incrementMinor, boolean incrementMicro) throws CoreException { return newVersion(Version.emptyVersion, incrementMajor, incrementMinor, incrementMicro); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public Version newVersion(Version base, boolean incrementMajor, boolean incrementMinor, boolean incrementMicro) throws CoreException { int major = base.getMajor(); if (incrementMajor) ++major; int minor = base.getMinor(); if (incrementMinor) ++minor; int micro = base.getMicro(); if (incrementMicro) ++micro; for (Version version : getRevisions().keySet()) if (version.getMajor() == major && version.getMinor() == minor && version.getMicro() == micro) return version; return new Version(major, minor, micro, Revision.VERSION_QUALIFIER_FORMAT.format(new Date())); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public Version nextVersion() throws CoreException { if (!eIsSet(ClassMakerPackage.Literals.PROJECT__PROJECT_VERSION)) return newVersion(true, false, false); return newVersion(getProjectVersion(), false, false, true); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void checkout(Version version) { Revision revision = null; if (getRevisions().containsKey(version)) { setProjectVersion(version); revision = getRevisions().get(version); if (!revision.eIsSet(ClassMakerPackage.Literals.REVISION__TIMESTAMP)) if (!revision.getStateHistory().isEmpty()) checkout(version, ListUtil.getLast(revision.getStateHistory()).getKey()); else { return; } checkout(version, revision.getTimestamp()); } else if (!getRevisions().isEmpty() && (version == null || version.equals(Version.emptyVersion))) checkout(ListUtil.getLast(getRevisions()).getKey()); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void checkout(Version version, long time) { Revision revision = null; if (getRevisions().containsKey(version)) { setProjectVersion(version); if (getProjectName().isEmpty()) return; Git git = null; @SuppressWarnings("unchecked") SCMOperator<Git> operator = (SCMOperator<Git>) getWorkspace().getSCMRegistry().get(getProjectName()); Ref ref = null; try { git = operator.getRepositorySCM(); ref = git.getRepository().findRef(version.toString()); if (ref != null) git.checkout().setName(ref.getName()).call(); } catch (CheckoutConflictException e) { if (git != null) { try { ResetCommand reset = git.reset().setMode(ResetType.HARD); if (ref != null) reset.setRef(ref.getName()); reset.call(); } catch (CheckoutConflictException ex) { ClassMakerPlugin.getInstance().getLog().log(ClassMakerPlugin.createErrorStatus(ex)); } catch (GitAPIException ex) { ClassMakerPlugin.getInstance().getLog().log(ClassMakerPlugin.createErrorStatus(ex)); } } } catch (Exception e) { ClassMakerPlugin.getInstance().getLog().log(ClassMakerPlugin.createErrorStatus(e)); } finally { try { operator.ungetRepositorySCM(); } catch (Exception e) { ClassMakerPlugin.getInstance().getLog().log(ClassMakerPlugin.createErrorStatus(e)); } } revision = getRevisions().get(version); if (revision.getStateHistory().containsKey(time)) { State state = revision.getStateHistory().get((Object) time); EList<String> commits = state.getCommitIds(); if (!commits.isEmpty()) { revision.checkout(time, state.getCommitId()); } else revision.checkout(time); } } else throw new IllegalStateException(NLS.bind(Messages.VersionNotExists, version)); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void checkout(Version version, long time, String commitId) { if (version.equals(VERSION_EDEFAULT)) { setProjectVersion(version); return; } checkout(version, time); getRevision().checkout(time, commitId); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void checkout(long time) { if (getRevision().getStateHistory().containsKey(time)) getRevision().checkout(time); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void checkout(long time, String commitId) { if (getRevision().getStateHistory().containsKey(time)) { State state = getRevision().getStateHistory().get((Object) time); if (state.getCommitIds().contains(commitId)) getRevision().checkout(time, commitId); } } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void checkout(String commitId) { if (getState().getCommitIds().contains(commitId)) getState().checkout(commitId); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ @Override public void initAdapters(Revision revision) { } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void notifyResourceChanged(Notification notification) throws Exception { for (Object listener : resourceChangeListeners.getListeners()) { ((ResourceChangeListener) listener).changed(notification); } } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public String make(IProgressMonitor monitor) throws CoreException { removeResourceChangeListener(getResourceReloadListener()); String result = "You made it!"; //$NON-NLS-1$ addResourceChangeListener(getResourceReloadListener()); setNeedCompletionNotification(true); return result; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public boolean open(IProgressMonitor monitor) throws CoreException { String projectName = getProjectName(); if (projectName.isEmpty()) return false; initialize(false); IWorkspace workspace = ResourcesPlugin.getWorkspace(); if (ClassMakerPlugin.getInstance().isTurnOffAutoBuilding() && workspace.isAutoBuilding()) { ResourceUtils.setAutoBuilding(workspace, false); } IProject project = workspace.getRoot().getProject(projectName); if (project.isOpen()) return true; project.open(monitor); return true; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void close(IProgressMonitor monitor) throws CoreException { String projectName = getProjectName(); if (projectName.isEmpty()) return; IWorkspace workspace = ResourcesPlugin.getWorkspace(); IProject project = workspace.getRoot().getProject(projectName); project.close(monitor); if (ClassMakerPlugin.getInstance().isTurnOffAutoBuilding()) try { ResourceUtils.restoreAutoBuilding(workspace); } catch (IllegalArgumentException e) { } } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public String initialize(boolean commit) { setName(getProjectName()); URI uri = getResourceURI(); Resource resource = null; if (new File(uri.toFileString()).exists()) { resource = getWorkspace().getResourceSet().getResource(uri, false); if (resource != null) { try { resource.load(Collections.emptyMap()); } catch (IOException e) { ClassMakerPlugin.getInstance().getLog().log(ClassMakerPlugin.createErrorStatus(e)); } if (eIsSet(ClassMakerPackage.PROJECT__REVISION) && getRevision().eIsSet(ClassMakerPackage.Literals.REVISION__STATE)) getRevision().getState().setResource(resource); } else { createResource(uri, commit); } } else { createResource(uri, commit); } getWorkspace().getResourceSet().eAdapters().add(resourceAdapter); addResourceChangeListener(getResourceReloadListener()); // TODO Add SCM support if commit return ""; //$NON-NLS-1$ } private void createResource(URI uri, boolean commit) { Resource resource = getWorkspace().getResourceSet().createResource(uri); if (eIsSet(ClassMakerPackage.PROJECT__REVISION) && getRevision().eIsSet(ClassMakerPackage.Literals.REVISION__STATE)) getRevision().getState().setResource(resource); if (commit) try { resource.save(Collections.emptyMap()); } catch (IOException e) { ClassMakerPlugin.getInstance().getLog().log(ClassMakerPlugin.createErrorStatus(e)); } } private URI getResourceURI() { IPath workspacePath = ResourcesPlugin.getWorkspace().getRoot().getRawLocation(); return URI.createFileURI(workspacePath.append(getResourcePath()).toString()); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void addCompletionListener(CompletionListener resultListener) { for (Object listener : completionListeners.getListeners()) if (listener.equals(resultListener)) return; completionListeners.add(resultListener); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void removeCompletionListener(CompletionListener resultListener) { completionListeners.remove(resultListener); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated NOT */ public void onModelResourceCreate(Resource eResource) { for (Adapter adapter : eAdapters()) if (adapter.isAdapterForType(Resource.class)) { adapter.notifyChanged(new NotificationImpl(Notification.SET, null, eResource)); } } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public NotificationChain eInverseAdd(InternalEObject otherEnd, int featureID, NotificationChain msgs) { switch (featureID) { case ClassMakerPackage.PROJECT__WORKSPACE: if (eInternalContainer() != null) msgs = eBasicRemoveFromContainer(msgs); return basicSetWorkspace((Workspace) 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 ClassMakerPackage.PROJECT__WORKSPACE: return basicSetWorkspace(null, msgs); case ClassMakerPackage.PROJECT__COMPLETION_NOTIFICATION_ADAPTER: return basicSetCompletionNotificationAdapter(null, msgs); case ClassMakerPackage.PROJECT__REVISIONS: return ((InternalEList<?>) getRevisions()).basicRemove(otherEnd, msgs); } return super.eInverseRemove(otherEnd, featureID, msgs); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public NotificationChain eBasicRemoveFromContainerFeature(NotificationChain msgs) { switch (eContainerFeatureID()) { case ClassMakerPackage.PROJECT__WORKSPACE: return eInternalContainer().eInverseRemove(this, ClassMakerPackage.WORKSPACE__PROJECTS, Workspace.class, msgs); } return super.eBasicRemoveFromContainerFeature(msgs); } @Override public boolean contains(ISchedulingRule rule) { if (this == rule) return true; if (rule instanceof MultiRule) { MultiRule multi = (MultiRule) rule; ISchedulingRule[] children = multi.getChildren(); for (int i = 0; i < children.length; i++) if (!contains(children[i])) return false; return true; } if (ResourcesPlugin.getWorkspace().getRoot().getProject(getProjectName()).contains(rule)) return true; return getWorkspace().contains(rule); } @Override public boolean isConflicting(ISchedulingRule rule) { if (this == rule) return true; return ResourcesPlugin.getWorkspace().getRoot().getProject(getProjectName()).isConflicting(rule) || getWorkspace().isConflicting(rule); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public Object eGet(int featureID, boolean resolve, boolean coreType) { switch (featureID) { case ClassMakerPackage.PROJECT__NAME: return getName(); case ClassMakerPackage.PROJECT__PROJECT_NAME: return getProjectName(); case ClassMakerPackage.PROJECT__CHILDREN: return getChildren(); case ClassMakerPackage.PROJECT__DIRTY: return isDirty(); case ClassMakerPackage.PROJECT__WORKSPACE: return getWorkspace(); case ClassMakerPackage.PROJECT__RESOURCE_PATH: return getResourcePath(); case ClassMakerPackage.PROJECT__NEED_COMPLETION_NOTIFICATION: return isNeedCompletionNotification(); case ClassMakerPackage.PROJECT__COMPLETION_NOTIFICATION_ADAPTER: return getCompletionNotificationAdapter(); case ClassMakerPackage.PROJECT__RESOURCE_RELOAD_LISTENER: return getResourceReloadListener(); case ClassMakerPackage.PROJECT__SAVING_RESOURCE: return isSavingResource(); case ClassMakerPackage.PROJECT__REVISION: if (resolve) return getRevision(); return basicGetRevision(); case ClassMakerPackage.PROJECT__REVISIONS: if (coreType) return getRevisions(); else return getRevisions().map(); case ClassMakerPackage.PROJECT__PROJECT_VERSION: return getProjectVersion(); case ClassMakerPackage.PROJECT__SELECT_REVEAL_HANDLER: if (resolve) return getSelectRevealHandler(); return basicGetSelectRevealHandler(); case ClassMakerPackage.PROJECT__VERSION: return getVersion(); case ClassMakerPackage.PROJECT__STATE: if (resolve) return getState(); return basicGetState(); } return super.eGet(featureID, resolve, coreType); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void eSet(int featureID, Object newValue) { switch (featureID) { case ClassMakerPackage.PROJECT__NAME: setName((String) newValue); return; case ClassMakerPackage.PROJECT__PROJECT_NAME: setProjectName((String) newValue); return; case ClassMakerPackage.PROJECT__WORKSPACE: setWorkspace((Workspace) newValue); return; case ClassMakerPackage.PROJECT__NEED_COMPLETION_NOTIFICATION: setNeedCompletionNotification((Boolean) newValue); return; case ClassMakerPackage.PROJECT__COMPLETION_NOTIFICATION_ADAPTER: setCompletionNotificationAdapter((CompletionNotificationAdapter) newValue); return; case ClassMakerPackage.PROJECT__SAVING_RESOURCE: setSavingResource((Boolean) newValue); return; case ClassMakerPackage.PROJECT__REVISION: setRevision((Revision) newValue); return; case ClassMakerPackage.PROJECT__REVISIONS: ((EStructuralFeature.Setting) getRevisions()).set(newValue); return; case ClassMakerPackage.PROJECT__PROJECT_VERSION: setProjectVersion((Version) newValue); return; case ClassMakerPackage.PROJECT__SELECT_REVEAL_HANDLER: setSelectRevealHandler((SelectRevealHandler) newValue); return; case ClassMakerPackage.PROJECT__VERSION: setVersion((Version) newValue); return; } super.eSet(featureID, newValue); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public void eUnset(int featureID) { switch (featureID) { case ClassMakerPackage.PROJECT__NAME: setName(NAME_EDEFAULT); return; case ClassMakerPackage.PROJECT__PROJECT_NAME: setProjectName(PROJECT_NAME_EDEFAULT); return; case ClassMakerPackage.PROJECT__WORKSPACE: setWorkspace((Workspace) null); return; case ClassMakerPackage.PROJECT__NEED_COMPLETION_NOTIFICATION: setNeedCompletionNotification(NEED_COMPLETION_NOTIFICATION_EDEFAULT); return; case ClassMakerPackage.PROJECT__COMPLETION_NOTIFICATION_ADAPTER: setCompletionNotificationAdapter((CompletionNotificationAdapter) null); return; case ClassMakerPackage.PROJECT__SAVING_RESOURCE: setSavingResource(SAVING_RESOURCE_EDEFAULT); return; case ClassMakerPackage.PROJECT__REVISION: setRevision((Revision) null); return; case ClassMakerPackage.PROJECT__REVISIONS: getRevisions().clear(); return; case ClassMakerPackage.PROJECT__PROJECT_VERSION: setProjectVersion(PROJECT_VERSION_EDEFAULT); return; case ClassMakerPackage.PROJECT__SELECT_REVEAL_HANDLER: setSelectRevealHandler((SelectRevealHandler) null); return; case ClassMakerPackage.PROJECT__VERSION: setVersion(VERSION_EDEFAULT); return; } super.eUnset(featureID); } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public boolean eIsSet(int featureID) { switch (featureID) { case ClassMakerPackage.PROJECT__NAME: return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name); case ClassMakerPackage.PROJECT__PROJECT_NAME: return PROJECT_NAME_EDEFAULT == null ? projectName != null : !PROJECT_NAME_EDEFAULT.equals(projectName); case ClassMakerPackage.PROJECT__CHILDREN: return !getChildren().isEmpty(); case ClassMakerPackage.PROJECT__DIRTY: return isDirty() != DIRTY_EDEFAULT; case ClassMakerPackage.PROJECT__WORKSPACE: return getWorkspace() != null; case ClassMakerPackage.PROJECT__RESOURCE_PATH: return RESOURCE_PATH_EDEFAULT == null ? getResourcePath() != null : !RESOURCE_PATH_EDEFAULT.equals(getResourcePath()); case ClassMakerPackage.PROJECT__NEED_COMPLETION_NOTIFICATION: return needCompletionNotification != NEED_COMPLETION_NOTIFICATION_EDEFAULT; case ClassMakerPackage.PROJECT__COMPLETION_NOTIFICATION_ADAPTER: return completionNotificationAdapter != null; case ClassMakerPackage.PROJECT__RESOURCE_RELOAD_LISTENER: return resourceReloadListener != null; case ClassMakerPackage.PROJECT__SAVING_RESOURCE: return savingResource != SAVING_RESOURCE_EDEFAULT; case ClassMakerPackage.PROJECT__REVISION: return basicGetRevision() != null; case ClassMakerPackage.PROJECT__REVISIONS: return revisions != null && !revisions.isEmpty(); case ClassMakerPackage.PROJECT__PROJECT_VERSION: return PROJECT_VERSION_EDEFAULT == null ? projectVersion != null : !PROJECT_VERSION_EDEFAULT.equals(projectVersion); case ClassMakerPackage.PROJECT__SELECT_REVEAL_HANDLER: return selectRevealHandler != null; case ClassMakerPackage.PROJECT__VERSION: return VERSION_EDEFAULT == null ? version != null : !VERSION_EDEFAULT.equals(version); case ClassMakerPackage.PROJECT__STATE: return basicGetState() != null; } return super.eIsSet(featureID); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; ProjectImpl other = (ProjectImpl) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } /** * <!-- begin-user-doc --> <!-- end-user-doc --> * * @generated */ @Override public String toString() { if (eIsProxy()) return super.toString(); StringBuilder result = new StringBuilder(super.toString()); result.append(" (name: "); result.append(name); result.append(", projectName: "); result.append(projectName); result.append(", needCompletionNotification: "); result.append(needCompletionNotification); result.append(", savingResource: "); result.append(savingResource); result.append(", projectVersion: "); result.append(projectVersion); result.append(", version: "); result.append(version); result.append(')'); return result.toString(); } } // ProjectImpl