// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package com.amalto.workbench.editors.xmleditor;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextOperationTarget;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.editors.text.TextEditor;
import com.amalto.workbench.editors.DataModelMainPage;
import com.amalto.workbench.editors.XObjectEditor;
import com.amalto.workbench.models.TreeObject;
import com.amalto.workbench.utils.Util;
import com.amalto.workbench.webservices.WSDataModel;
public class XMLEditor extends TextEditor {
TreeObject xobject;
private ColorManager colorManager;
XObjectEditor editor;
int state = -1;
private boolean modified = false;
public boolean isModified() {
return modified;
}
public void setModified(boolean modified) {
this.modified = modified;
}
public XMLEditor(XObjectEditor editor, TreeObject xobject) {
super();
this.xobject = xobject;
this.editor = editor;
colorManager = new ColorManager();
setSourceViewerConfiguration(new XMLConfiguration(colorManager));
setDocumentProvider(new XMLDocumentProvider());
}
@Override
public void createPartControl(Composite parent) {
super.createPartControl(parent);
// initializeKeyPress((SourceViewer)getSourceViewer());
}
/**
* @deprecated
* @param viewer
*/
@Deprecated
private void initializeKeyPress(final SourceViewer viewer) {
StyledText styledText = viewer.getTextWidget();
styledText.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
if (e.keyCode == 'x' && e.stateMask == SWT.CTRL) {
viewer.doOperation(ITextOperationTarget.CUT);
} else if (e.keyCode == 'v' && e.stateMask == SWT.CTRL) {
viewer.doOperation(ITextOperationTarget.PASTE);
}
}
});
}
@Override
public void dispose() {
colorManager.dispose();
super.dispose();
}
@Override
public boolean isEditable() {
return true;
}
@Override
public boolean isEditorInputModifiable() {
return true;
}
@Override
public boolean isSaveOnCloseNeeded() {
return true;
}
@Override
public void doSave(IProgressMonitor progressMonitor) {
// WSDataModel wsObject = (WSDataModel) (xobject.getWSObject());
IDocument doc = ((XMLEditorInput) this.getEditorInput()).getDocument();
String schema = doc.get();
DataModelMainPage page = (DataModelMainPage) editor.formPages.get(0);
page.setXsdSchema(null);
int ret = page.save(schema);
if (ret != 0) {
return;
}
setModified(true);
super.doSave(progressMonitor);
}
public void refresh(TreeObject xobject) {
state = -1;
this.xobject = xobject;
WSDataModel wsObject = (WSDataModel) (xobject.getWsObject());
Document doc = new Document(Util.formatXsdSource(wsObject.getXsdSchema()));
setInput(new XMLEditorInput(doc));
}
public void refresh() {
state = -1;
WSDataModel wsObject = (WSDataModel) (xobject.getWsObject());
IDocument doc = ((XMLEditorInput) this.getEditorInput()).getDocument();
wsObject.setXsdSchema(doc.get());
}
public void markDirty() {
firePropertyChange(PROP_DIRTY);
}
@Override
public boolean isDirty() {
if (state == 1) {
return true;
}
return super.isDirty();
}
public void setState(int state) {
this.state = state;
}
}