// Copyright 2012 Google Inc. All Rights Reserved.
//
// 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 com.google.collide.client.filehistory;
import com.google.collide.client.AppContext;
import com.google.collide.client.code.EditableContentArea;
import com.google.collide.client.code.EditableContentArea.Content;
import com.google.collide.client.diff.EditorDiffContainer;
import com.google.collide.client.document.DocumentManager;
import com.google.collide.client.history.Place;
import com.google.collide.client.history.PlaceNavigationHandler;
import com.google.collide.client.util.Elements;
import com.google.collide.client.util.PathUtil;
/**
* Navigation handler for the FileHistoryPlace.
*
*
*/
public class FileHistoryNavigationHandler
extends PlaceNavigationHandler<FileHistoryPlace.NavigationEvent> {
private final EditorDiffContainer editorDiffContainer;
private final Timeline timeline;
private final FileHistory fileHistory;
private final EditableContentArea contentArea;
private final FileHistoryApi api;
private final AppContext appContext;
private Content oldContent;
public FileHistoryNavigationHandler(Place currentPlace,
AppContext appContext,
EditableContentArea contentArea,
DocumentManager documentManager) {
this.appContext = appContext;
this.contentArea = contentArea;
this.editorDiffContainer = EditorDiffContainer.create(appContext);
this.fileHistory = FileHistory.create(
currentPlace, appContext, new FileHistory.View(appContext.getResources()));
this.timeline = Timeline.create(fileHistory, appContext);
this.api =
new FileHistoryApi(appContext,editorDiffContainer, timeline, documentManager);
this.fileHistory.setApi(api);
this.timeline.setApi(api);
}
@Override
public void cleanup() {
fileHistory.teardown();
contentArea.getEditorToolBar().show();
if (oldContent != null) {
contentArea.setContent(oldContent);
}
}
@Override
protected void enterPlace(FileHistoryPlace.NavigationEvent navigationEvent) {
Elements.asJsElement(fileHistory.getView().diff)
.appendChild(editorDiffContainer.getView().getElement());
oldContent = contentArea.getCurrentContent();
contentArea.setContent(fileHistory);
contentArea.setLocationBreadcrumbsVisibility(false);
fileHistory.setup(contentArea.getView().getHeaderElement());
contentArea.getEditorToolBar().hide();
/* Get file contents and diff */
PathUtil filePath = navigationEvent.getPath();
fileHistory.setPath(filePath);
timeline.setPath(filePath);
timeline.setLoading();
api.getFileRevisions(filePath, navigationEvent.getRootId());
}
}