| /******************************************************************************* |
| * Copyright (c) 2013 Tasktop Technologies, 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.ui.spi.editor; |
| |
| import java.io.File; |
| import java.util.Date; |
| |
| import org.eclipse.jface.dialogs.IMessageProvider; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.mylyn.internal.tasks.ui.actions.SynchronizeEditorAction; |
| import org.eclipse.mylyn.internal.tasks.ui.editors.Messages; |
| import org.eclipse.mylyn.reviews.core.model.IRepository; |
| import org.eclipse.mylyn.reviews.core.model.IReview; |
| import org.eclipse.mylyn.reviews.core.spi.ReviewsConnector; |
| import org.eclipse.mylyn.reviews.core.spi.remote.emf.RemoteEmfConsumer; |
| import org.eclipse.mylyn.reviews.core.spi.remote.emf.RemoteEmfObserver; |
| import org.eclipse.mylyn.reviews.core.spi.remote.review.IReviewRemoteFactoryProvider; |
| import org.eclipse.mylyn.reviews.spi.edit.remote.AbstractRemoteEditFactoryProvider; |
| import org.eclipse.mylyn.reviews.spi.edit.remote.review.ReviewsRemoteEditFactoryProvider; |
| import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPage; |
| import org.eclipse.mylyn.tasks.ui.editors.TaskEditor; |
| import org.eclipse.ui.IEditorInput; |
| import org.eclipse.ui.IEditorSite; |
| import org.eclipse.ui.forms.events.HyperlinkAdapter; |
| import org.eclipse.ui.forms.events.HyperlinkEvent; |
| |
| /** |
| * Marks task editor as providing Review model for extending classes. |
| * |
| * @author Miles Parker |
| */ |
| public abstract class AbstractReviewTaskEditorPage extends AbstractTaskEditorPage { |
| |
| private RemoteEmfConsumer<IRepository, IReview, String, ?, ?, Date> reviewConsumer; |
| |
| private final RemoteEmfObserver<IRepository, IReview, String, Date> reviewObserver = new RemoteEmfObserver<IRepository, IReview, String, Date>(); |
| |
| public AbstractReviewTaskEditorPage(TaskEditor editor, String id, String label, String connectorKind) { |
| super(editor, id, label, connectorKind); |
| } |
| |
| @Override |
| public void init(final IEditorSite site, final IEditorInput input) { |
| AbstractReviewTaskEditorPage.super.init(site, input); |
| |
| checkIfModelIsCached(); |
| |
| reviewConsumer = getFactoryProvider().getReviewFactory().getConsumerForLocalKey(getFactoryProvider().getRoot(), |
| getTask().getTaskId()); |
| reviewConsumer.addObserver(reviewObserver); |
| reviewConsumer.open(); |
| } |
| |
| private void checkIfModelIsCached() { |
| AbstractRemoteEditFactoryProvider factoryProvider = (AbstractRemoteEditFactoryProvider) getFactoryProvider(); |
| String reviewPath = factoryProvider.getDataLocator() |
| .getFilePath(factoryProvider.getContainerSegment(), "Review", getTask().getTaskId(), "reviews") |
| .toOSString(); |
| if (!new File(reviewPath).exists()) { |
| getTaskEditor().setMessage(Messages.AbstractTaskEditorPage_Synchronize_to_retrieve_task_data, |
| IMessageProvider.WARNING, new HyperlinkAdapter() { |
| @Override |
| public void linkActivated(HyperlinkEvent e) { |
| SynchronizeEditorAction synchronizeEditorAction = new SynchronizeEditorAction(); |
| synchronizeEditorAction.selectionChanged(new StructuredSelection(getTaskEditor())); |
| if (synchronizeEditorAction != null) { |
| synchronizeEditorAction.run(); |
| } |
| } |
| }); |
| } |
| } |
| |
| public IReviewRemoteFactoryProvider getFactoryProvider() { |
| return (IReviewRemoteFactoryProvider) ((ReviewsConnector) getConnector()).getReviewClient(getTaskRepository()) |
| .getFactoryProvider(); |
| } |
| |
| @Override |
| public void dispose() { |
| IReviewRemoteFactoryProvider provider = getFactoryProvider(); |
| if (provider instanceof ReviewsRemoteEditFactoryProvider) { |
| ReviewsRemoteEditFactoryProvider reviewsProvider = (ReviewsRemoteEditFactoryProvider) provider; |
| reviewsProvider.save(getReview()); |
| reviewObserver.dispose(); |
| } |
| super.dispose(); |
| } |
| |
| public IReview getReview() { |
| return reviewConsumer.getModelObject(); |
| } |
| } |