/*******************************************************************************
* Copyright (c) 2014, 2015 Cisco Systems, Inc. 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
*
*******************************************************************************/
package com.cisco.yangide.editor.compare;
import java.io.IOException;
import java.io.InputStreamReader;
import org.eclipse.compare.CompareConfiguration;
import org.eclipse.compare.IStreamContentAccessor;
import org.eclipse.compare.IViewerCreator;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.ui.texteditor.ChainedPreferenceStore;
import com.cisco.yangide.editor.YangEditorPlugin;
import com.cisco.yangide.editor.editors.YangColorManager;
import com.cisco.yangide.editor.editors.YangSourceViewer;
import com.cisco.yangide.editor.editors.YangSourceViewerConfiguration;
import com.cisco.yangide.editor.preferences.YangDocumentSetupParticipant;
/**
* @author Konstantin Zaitsev
* @date Jul 31, 2014
*/
public class YangFileViewerCreator implements IViewerCreator {
@Override
public Viewer createViewer(Composite parent, CompareConfiguration config) {
YangSourceViewer yangSourceViewer = new YangSourceViewer(parent, null, null, false, SWT.BORDER | SWT.V_SCROLL
| SWT.H_SCROLL) {
@Override
public void setInput(Object input) {
if (input instanceof IStreamContentAccessor) {
IDocument document = new Document(getContentFromStream((IStreamContentAccessor) input));
new YangDocumentSetupParticipant().setup(document);
setDocument(document);
} else {
super.setInput(input);
}
}
};
YangColorManager colorManager = new YangColorManager(false);
IPreferenceStore store = new ChainedPreferenceStore(new IPreferenceStore[] {
YangEditorPlugin.getDefault().getCombinedPreferenceStore(), EditorsUI.getPreferenceStore() });
YangSourceViewerConfiguration configuration = new YangSourceViewerConfiguration(store, colorManager, null);
yangSourceViewer.configure(configuration);
yangSourceViewer.setEditable(false);
Font font = JFaceResources.getFont(JFaceResources.TEXT_FONT);
yangSourceViewer.getTextWidget().setFont(font);
return yangSourceViewer;
}
private String getContentFromStream(IStreamContentAccessor input) {
char[] cbuf = new char[1024];
int len = 0;
StringBuilder sb = new StringBuilder();
try (InputStreamReader in = new InputStreamReader(input.getContents(), "UTF-8")) {
while ((len = in.read(cbuf)) > 0) {
sb.append(cbuf, 0, len);
}
} catch (IOException | CoreException e) {
YangEditorPlugin.log(e);
}
return sb.toString();
}
}