diff options
author | Miles Parker | 2013-06-07 00:22:05 +0000 |
---|---|---|
committer | Miles Parker | 2013-06-07 00:27:41 +0000 |
commit | 9c8cc01752241f1513b0451b622118d38fb411ca (patch) | |
tree | 492f754588db98aba9d7dd6cf198093129850b2d /org.eclipse.mylyn.reviews.edit | |
parent | 8113351e4010169a26249547ec7ce878d4d6bca6 (diff) | |
download | org.eclipse.mylyn.reviews-9c8cc01752241f1513b0451b622118d38fb411ca.tar.gz org.eclipse.mylyn.reviews-9c8cc01752241f1513b0451b622118d38fb411ca.tar.xz org.eclipse.mylyn.reviews-9c8cc01752241f1513b0451b622118d38fb411ca.zip |
[Reversion] Backing out 394020 Persist Review models
Commit Id: 85c80d97bc4e2f9bcc6df383eceaf56ede459d0c
Change-Id: Ie567baab3843b1c112b07a077336f29aafb08210
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=410013
Diffstat (limited to 'org.eclipse.mylyn.reviews.edit')
-rw-r--r-- | org.eclipse.mylyn.reviews.edit/META-INF/MANIFEST.MF | 9 | ||||
-rw-r--r-- | org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/edit/ReviewsEditPlugin.java (renamed from org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/edit/ReviewsEditPluginActivator.java) | 6 | ||||
-rw-r--r-- | org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/edit/remote/AbstractRemoteEditFactoryProvider.java | 109 | ||||
-rw-r--r-- | org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/edit/remote/ReviewsRemoteEditFactoryProvider.java | 31 | ||||
-rw-r--r-- | org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/spi/edit/remote/AbstractRemoteEditFactoryProvider.java | 328 | ||||
-rw-r--r-- | org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/spi/edit/remote/review/ReviewsRemoteEditFactoryProvider.java | 75 |
6 files changed, 146 insertions, 412 deletions
diff --git a/org.eclipse.mylyn.reviews.edit/META-INF/MANIFEST.MF b/org.eclipse.mylyn.reviews.edit/META-INF/MANIFEST.MF index 83f8393cd..d2bbe4db3 100644 --- a/org.eclipse.mylyn.reviews.edit/META-INF/MANIFEST.MF +++ b/org.eclipse.mylyn.reviews.edit/META-INF/MANIFEST.MF @@ -10,14 +10,11 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.emf.ecore;bundle-version="2.5.0", org.eclipse.emf.ecore.xmi;bundle-version="2.5.0", org.eclipse.emf.edit;bundle-version="2.5.0", - org.eclipse.mylyn.reviews.core;bundle-version="2.0.0", - org.eclipse.core.resources + org.eclipse.mylyn.reviews.core;bundle-version="2.0.0" Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-Vendor: Eclipse Mylyn Export-Package: org.eclipse.mylyn.reviews.edit, org.eclipse.mylyn.reviews.edit.provider, - org.eclipse.mylyn.reviews.spi.edit.remote;x-friends:="org.eclipse.mylyn.reviews.ui", - org.eclipse.mylyn.reviews.spi.edit.remote.review;x-friends:="org.eclipse.mylyn.reviews.ui" -Bundle-Activator: org.eclipse.mylyn.reviews.edit.ReviewsEditPluginActivator -Import-Package: org.apache.commons.io + org.eclipse.mylyn.reviews.edit.remote +Bundle-Activator: org.eclipse.mylyn.reviews.edit.ReviewsEditPlugin diff --git a/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/edit/ReviewsEditPluginActivator.java b/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/edit/ReviewsEditPlugin.java index fbc67cfea..db2215b12 100644 --- a/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/edit/ReviewsEditPluginActivator.java +++ b/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/edit/ReviewsEditPlugin.java @@ -14,11 +14,11 @@ package org.eclipse.mylyn.reviews.edit; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; -public class ReviewsEditPluginActivator implements BundleActivator { +public class ReviewsEditPlugin implements BundleActivator { public static final String PLUGIN_ID = "org.eclipse.mylyn.reviews.edit"; //$NON-NLS-1$ - private static ReviewsEditPluginActivator plugin; + private static ReviewsEditPlugin plugin; public void start(BundleContext context) throws Exception { plugin = this; @@ -28,7 +28,7 @@ public class ReviewsEditPluginActivator implements BundleActivator { plugin = null; } - public static ReviewsEditPluginActivator getDefault() { + public static ReviewsEditPlugin getDefault() { return plugin; } } diff --git a/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/edit/remote/AbstractRemoteEditFactoryProvider.java b/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/edit/remote/AbstractRemoteEditFactoryProvider.java new file mode 100644 index 000000000..b4f74978c --- /dev/null +++ b/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/edit/remote/AbstractRemoteEditFactoryProvider.java @@ -0,0 +1,109 @@ +/******************************************************************************* + * Copyright (c) 2013 Ericsson and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Miles Parker (Tasktop Technologies) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylyn.reviews.edit.remote; + +import java.util.HashMap; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.emf.common.command.AbstractCommand; +import org.eclipse.emf.common.command.BasicCommandStack; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EFactory; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.impl.ResourceImpl; +import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; +import org.eclipse.emf.edit.domain.EditingDomain; +import org.eclipse.emf.edit.provider.ComposedAdapterFactory; +import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory; +import org.eclipse.mylyn.commons.core.StatusHandler; +import org.eclipse.mylyn.reviews.core.model.IRepository; +import org.eclipse.mylyn.reviews.core.spi.remote.AbstractRemoteFactoryProvider; +import org.eclipse.mylyn.reviews.edit.ReviewsEditPlugin; +import org.eclipse.mylyn.reviews.edit.provider.ReviewsItemProviderAdapterFactory; + +/** + * Supports decoupling of Reviews from remote API as well as job management. + * + * @author Miles Parker + */ +public abstract class AbstractRemoteEditFactoryProvider<ERootObject extends EObject> extends + AbstractRemoteFactoryProvider { + + private final EditingDomain editingDomain; + + ERootObject rootObject; + + public AbstractRemoteEditFactoryProvider(EFactory emfFactory, EClass rootClass) { + ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory( + ComposedAdapterFactory.Descriptor.Registry.INSTANCE); + + adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory()); + adapterFactory.addAdapterFactory(new ReviewsItemProviderAdapterFactory()); + + BasicCommandStack commandStack = new BasicCommandStack(); + editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>()); + + Resource resource = new ResourceImpl(); + + if (resource.getContents().size() > 0 && resource.getContents().get(0) instanceof IRepository) { + try { + rootObject = (ERootObject) resource.getContents().get(0); + } catch (ClassCastException e) { + StatusHandler.log(new Status(IStatus.ERROR, ReviewsEditPlugin.PLUGIN_ID, + "Problem creating editing domain. Unexpected root model content.", e)); + } + + } else { + try { + rootObject = (ERootObject) emfFactory.create(rootClass); + resource.getContents().add(rootObject); + } catch (ClassCastException e) { + StatusHandler.log(new Status(IStatus.ERROR, ReviewsEditPlugin.PLUGIN_ID, + "Problem creating editing domain. Root remote class must match remote editing domain type.", e)); + } + } + } + + @Override + public void modelExec(final Runnable runnable, boolean block) { + super.modelExec(new Runnable() { //Run in UI thread + public void run() { + editingDomain.getCommandStack().execute(new AbstractCommand() { + + public void redo() { + // noop + } + + public void execute() { + runnable.run(); + } + + @Override + protected boolean prepare() { + return true; + } + + @Override + public boolean canUndo() { + return false; + } + }); + } + }, block); + } + + public ERootObject getRoot() { + return rootObject; + } +} diff --git a/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/edit/remote/ReviewsRemoteEditFactoryProvider.java b/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/edit/remote/ReviewsRemoteEditFactoryProvider.java new file mode 100644 index 000000000..a4974b9f9 --- /dev/null +++ b/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/edit/remote/ReviewsRemoteEditFactoryProvider.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2013 Ericsson and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Miles Parker (Tasktop Technologies) - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylyn.reviews.edit.remote; + +import org.eclipse.emf.ecore.EFactory; +import org.eclipse.mylyn.reviews.core.model.IRepository; +import org.eclipse.mylyn.reviews.core.model.IReviewsFactory; +import org.eclipse.mylyn.reviews.core.spi.remote.review.IReviewRemoteFactoryProvider; +import org.eclipse.mylyn.reviews.internal.core.model.ReviewsPackage; + +/** + * Supports decoupling of Reviews from remote API as well as job management. + * + * @author Miles Parker + */ +public abstract class ReviewsRemoteEditFactoryProvider extends AbstractRemoteEditFactoryProvider<IRepository> implements + IReviewRemoteFactoryProvider { + + public ReviewsRemoteEditFactoryProvider() { + super((EFactory) IReviewsFactory.INSTANCE, ReviewsPackage.Literals.REPOSITORY); + } +} diff --git a/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/spi/edit/remote/AbstractRemoteEditFactoryProvider.java b/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/spi/edit/remote/AbstractRemoteEditFactoryProvider.java deleted file mode 100644 index 185a71a17..000000000 --- a/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/spi/edit/remote/AbstractRemoteEditFactoryProvider.java +++ /dev/null @@ -1,328 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 Ericsson and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Miles Parker (Tasktop Technologies) - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylyn.reviews.spi.edit.remote; - -import java.io.File; -import java.io.IOException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.apache.commons.io.FileUtils; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Status; -import org.eclipse.emf.common.command.AbstractCommand; -import org.eclipse.emf.common.command.BasicCommandStack; -import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.EAttribute; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EClassifier; -import org.eclipse.emf.ecore.EFactory; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EReference; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.xmi.XMLResource; -import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain; -import org.eclipse.emf.edit.domain.EditingDomain; -import org.eclipse.emf.edit.provider.ComposedAdapterFactory; -import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory; -import org.eclipse.mylyn.commons.core.StatusHandler; -import org.eclipse.mylyn.reviews.core.spi.remote.AbstractDataLocator; -import org.eclipse.mylyn.reviews.core.spi.remote.emf.AbstractRemoteEmfFactoryProvider; -import org.eclipse.mylyn.reviews.edit.ReviewsEditPluginActivator; -import org.eclipse.mylyn.reviews.edit.provider.ReviewsItemProviderAdapterFactory; - -/** - * Supports decoupling of Reviews from remote API as well as job management. - * - * @author Miles Parker - */ -public abstract class AbstractRemoteEditFactoryProvider<ERootObject extends EObject, EChildObject extends EObject> - extends AbstractRemoteEmfFactoryProvider<ERootObject, EChildObject> { - - private static final String DIRECTORY_METADATA = ".metadata"; //$NON-NLS-1$ - - private static final String NAME_DATA_DIR = ".mylyn"; //$NON-NLS-1$ - - final EditingDomain editingDomain; - - ERootObject rootObject; - - private final EFactory emfFactory; - - private final EReference parentReference; - - private final EAttribute localKeyAttribute; - - private final EClass childType; - - public AbstractRemoteEditFactoryProvider(final EFactory emfFactory, EReference parentReference, - final EAttribute localKeyAttribute, EClass childType) { - this.emfFactory = emfFactory; - this.parentReference = parentReference; - this.localKeyAttribute = localKeyAttribute; - this.childType = childType; - ComposedAdapterFactory adapterFactory = new ComposedAdapterFactory( - ComposedAdapterFactory.Descriptor.Registry.INSTANCE); - - adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory()); - adapterFactory.addAdapterFactory(new ReviewsItemProviderAdapterFactory()); - - BasicCommandStack commandStack = new BasicCommandStack(); - editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack, new HashMap<Resource, Boolean>()); - - Map<Object, Object> loadOptions = editingDomain.getResourceSet().getLoadOptions(); - loadOptions.put(XMLResource.OPTION_DEFER_ATTACHMENT, Boolean.TRUE); - loadOptions.put(XMLResource.OPTION_DEFER_IDREF_RESOLUTION, Boolean.TRUE); - loadOptions.put(XMLResource.OPTION_USE_DEPRECATED_METHODS, Boolean.TRUE); - loadOptions.put(XMLResource.OPTION_ENCODING, "UTF-8"); //$NON-NLS-1$ - } - - public EClass getRootClass() { - return parentReference.getEContainingClass(); - } - - @Override - public ERootObject open() { - if (rootObject == null) { - rootObject = (ERootObject) open(getRootClass(), getRootClass().getName()); - clearChildren(); - } - return rootObject; - } - - @Override - public EChildObject open(Object id) { - getService().ensureModelThread(); - Object parentList = getRoot().eGet(parentReference); - if (parentList instanceof List<?>) { - List<?> members = (List<?>) parentList; - for (Object object : members) { - Object localKey = ((EObject) object).eGet(localKeyAttribute); - if (localKey != null && localKey.equals(id)) { - return (EChildObject) object; - } - } - } - EChildObject child = (EChildObject) open(childType, (String) id); - if (child != null) { - ((List) getRoot().eGet(parentReference)).add(child); - } - return child; - } - - private Resource getResourceImpl(URI uri, boolean loadOnDemand) { - Resource resource = null; - String fileString = uri.devicePath(); - IPath filePath = new Path(fileString); - File file = new File(filePath.toOSString()); - if (!file.exists()) { - File dir = new File(new Path(fileString).removeFileExtension().removeLastSegments(1).toOSString()); - if (!dir.exists()) { - dir.mkdirs(); - } - resource = editingDomain.getResourceSet().createResource(uri); - save(resource); - } - - try { - resource = editingDomain.getResourceSet().getResource(uri, loadOnDemand); - } catch (Exception e) { - //If anything else goes wrong, just delete and recreate the file anyway! - StatusHandler.log(new Status(IStatus.ERROR, ReviewsEditPluginActivator.PLUGIN_ID, - "Problem with model file. Will be recreated at: " + uri, e)); - file.delete(); - resource = editingDomain.getResourceSet().getResource(uri, loadOnDemand); - } - - String className = getDataLocator().parseFileType(filePath); - EClass eClass = null; - for (EClassifier classifier : emfFactory.getEPackage().getEClassifiers()) { - if (className.equals(classifier.getName())) { - eClass = (EClass) classifier; - break; - } - } - if (eClass == null) { - throw new RuntimeException("No instances of " + className + " found in " - + emfFactory.getEPackage().getEClassifiers()); - } - - if (resource.getContents().size() > 0) { - Object object = resource.getContents().get(0); - if (!eClass.isInstance(object)) { - resource.getContents().clear(); - } - } - if (resource.getContents().size() == 0) { - try { - EChildObject object = (EChildObject) emfFactory.create(eClass); - String id = getDataLocator().parseFileName(filePath); - if (object.eClass().getEAllAttributes().contains(localKeyAttribute)) { - object.eSet(localKeyAttribute, id); - } - resource.getContents().add(object); - save(resource); - } catch (AssertionError e) { - StatusHandler.log(new Status(IStatus.ERROR, ReviewsEditPluginActivator.PLUGIN_ID, - "Bad provider defintion. Local key attribute must be reference of class child type. Local Key: " - + localKeyAttribute.getName() + " Class: " + eClass.getName(), e)); - } catch (ClassCastException e) { - StatusHandler.log(new Status(IStatus.ERROR, ReviewsEditPluginActivator.PLUGIN_ID, - "Bad provider definition. Root remote refernce must match child type.", e)); - } - } - - return resource; - } - - protected EObject open(EClass eClass, String id) { - String containerSegment = getContainerSegment(); - URI uri = URI.createFileURI(getDataLocator().getFilePath(containerSegment, eClass.getName(), id, - getFileExtension(parentReference.getEContainingClass())).toOSString()); - Resource resource = getResourceImpl(uri, true); - return resource.getContents().get(0); - } - - public String getContainerSegment() { - return parentReference.getContainerClass().getName(); - } - - public String getScalablePath(String id) { - return id; - } - - public abstract String getFileExtension(EClass eClass); - - public Resource recreateResource(URI fileUri) { - return editingDomain.getResourceSet().createResource(fileUri); - } - - @Override - public void close(EObject child) { - getService().ensureModelThread(); - if (child == null) { - return; - } - save(child); - Object parentList = getRoot().eGet(parentReference); - if (parentList instanceof List<?>) { - List<?> members = (List<?>) parentList; - members.remove(child); - } - Resource resource = child.eResource(); - if (resource != null) { - resource.getResourceSet().getResources().remove(resource); - resource.unload(); - } - } - - private void clearChildren() { - //We must allow this to occur outside of model thread for case of workbench shutdown - if (getRoot() != null) { - Object parentList = getRoot().eGet(parentReference); - if (parentList instanceof List<?>) { - List<?> members = (List<?>) parentList; - members.clear(); - } - } - } - - @Override - public void close() { - clearChildren(); - save(); - rootObject = null; - } - - public void save(EObject object) { - if (object != null) { - save(object.eResource()); - } - } - - public void save() { - save(getRoot()); - } - - public void save(Resource resource) { - if (resource == null) { - return; - } - final Map<Object, Object> saveOptions = new HashMap<Object, Object>(); - saveOptions.put(Resource.OPTION_SAVE_ONLY_IF_CHANGED, Resource.OPTION_SAVE_ONLY_IF_CHANGED_MEMORY_BUFFER); - if (resource instanceof XMLResource) { - saveOptions.put(XMLResource.OPTION_ENCODING, "UTF-8"); //$NON-NLS-1$ - } - try { - resource.save(saveOptions); - } catch (IOException e) { - StatusHandler.log(new Status(IStatus.ERROR, ReviewsEditPluginActivator.PLUGIN_ID, "Couldn't save model.", e)); - } - } - - /** - * WARNING: Recursively deletes directory specified by {@link AbstractDataLocator#getSystemPath()}. Ensure that that - * directory isn't used by any other resources! - */ - public void deleteCache() { - close(); - IPath systemPath = getDataLocator().getSystemPath(); - File file = new File(systemPath.toOSString()); - if (file.exists()) { - try { - FileUtils.deleteDirectory(file); - } catch (IOException e) { - StatusHandler.log(new Status(IStatus.ERROR, ReviewsEditPluginActivator.PLUGIN_ID, - "Problem when deleting cache.", e)); - } - } - } - - @Override - public void modelExec(final Runnable runnable, boolean block) { - super.modelExec(new Runnable() { //Run in UI thread - public void run() { - editingDomain.getCommandStack().execute(new AbstractCommand() { - - public void redo() { - // noop - } - - public void execute() { - runnable.run(); - } - - @Override - protected boolean prepare() { - return true; - } - - @Override - public boolean canUndo() { - return false; - } - }); - } - }, block); - } - - public ERootObject getRoot() { - return rootObject; - } - - public EditingDomain getEditingDomain() { - return editingDomain; - } -} diff --git a/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/spi/edit/remote/review/ReviewsRemoteEditFactoryProvider.java b/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/spi/edit/remote/review/ReviewsRemoteEditFactoryProvider.java deleted file mode 100644 index a8c83f3db..000000000 --- a/org.eclipse.mylyn.reviews.edit/src/org/eclipse/mylyn/reviews/spi/edit/remote/review/ReviewsRemoteEditFactoryProvider.java +++ /dev/null @@ -1,75 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2013 Ericsson and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Miles Parker (Tasktop Technologies) - initial API and implementation - *******************************************************************************/ - -package org.eclipse.mylyn.reviews.spi.edit.remote.review; - -import java.net.MalformedURLException; -import java.net.URL; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.emf.ecore.EClass; -import org.eclipse.emf.ecore.EFactory; -import org.eclipse.mylyn.reviews.core.model.IRepository; -import org.eclipse.mylyn.reviews.core.model.IReview; -import org.eclipse.mylyn.reviews.core.model.IReviewsFactory; -import org.eclipse.mylyn.reviews.core.spi.remote.review.IReviewRemoteFactoryProvider; -import org.eclipse.mylyn.reviews.edit.ReviewsEditPluginActivator; -import org.eclipse.mylyn.reviews.internal.core.model.ReviewsPackage; -import org.eclipse.mylyn.reviews.spi.edit.remote.AbstractRemoteEditFactoryProvider; -import org.eclipse.mylyn.tasks.core.RepositoryStatus; -import org.eclipse.mylyn.tasks.core.TaskRepository; - -/** - * Supports decoupling of Reviews from remote API as well as job management. - * - * @author Miles Parker - */ -public abstract class ReviewsRemoteEditFactoryProvider extends AbstractRemoteEditFactoryProvider<IRepository, IReview> - implements IReviewRemoteFactoryProvider { - - private final TaskRepository taskRepository; - - public ReviewsRemoteEditFactoryProvider(TaskRepository repository) { - super((EFactory) IReviewsFactory.INSTANCE, ReviewsPackage.Literals.REPOSITORY__REVIEWS, - ReviewsPackage.Literals.CHANGE__ID, ReviewsPackage.Literals.REVIEW); - this.taskRepository = repository; - } - - @Override - public IRepository open() { - IRepository modelRepository = super.open(); - modelRepository.setTaskRepository(taskRepository); - modelRepository.setTaskRepositoryUrl(taskRepository.getUrl()); - modelRepository.setTaskConnectorKind(taskRepository.getConnectorKind()); - return modelRepository; - } - - @Override - public String getContainerSegment() { - try { - return taskRepository.getConnectorKind() + "-" + asFileName(taskRepository.getUrl()); - } catch (MalformedURLException e) { - RepositoryStatus.createStatus(taskRepository, IStatus.ERROR, ReviewsEditPluginActivator.PLUGIN_ID, - "Bad repository url: " + taskRepository.getUrl()); - return "BadRepository"; - } - } - - public static String asFileName(String urlString) throws MalformedURLException { - URL url = new URL(urlString); - return url.getProtocol() + "-" + url.getHost() + "-" + url.getPath().replaceAll("/", "-"); - } - - @Override - public String getFileExtension(EClass eClass) { - return "reviews"; - } -} |