/*
* Copyright (c) 2012, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.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.eclipse.org/legal/epl-v10.html
*
* 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.dart.tools.ui.web.xml;
import com.google.dart.tools.core.html.XmlDocument;
import com.google.dart.tools.core.html.XmlNode;
import com.google.dart.tools.core.html.XmlParser;
import com.google.dart.tools.ui.web.utils.WebEditor;
import org.eclipse.jface.text.IRegion;
import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
/**
* An editor for xml files.
*/
public class XmlEditor extends WebEditor {
private XmlContentOutlinePage outlinePage;
private XmlDocument model;
public XmlEditor() {
setRulerContextMenuId("#DartXmlEditorRulerContext");
setSourceViewerConfiguration(new XmlSourceViewerConfiguration(this));
setDocumentProvider(new XmlDocumentProvider());
}
@SuppressWarnings("rawtypes")
@Override
public Object getAdapter(Class required) {
if (IContentOutlinePage.class.equals(required)) {
if (outlinePage == null) {
outlinePage = new XmlContentOutlinePage(this);
}
return outlinePage;
}
return super.getAdapter(required);
}
public void selectAndReveal(XmlNode node) {
if (node.getEndToken() != null) {
int length = node.getEndToken().getLocation() - node.getStartToken().getLocation();
length += node.getEndToken().getValue().length();
selectAndReveal(node.getStartToken().getLocation(), length);
} else {
selectAndReveal(node.getStartToken().getLocation(), 0);
}
}
protected XmlDocument getModel() {
if (model == null) {
model = new XmlParser(getDocument().get()).parse();
}
return model;
}
@Override
protected void handleDocumentModified() {
model = null;
}
@Override
protected void handleReconcilation(IRegion partition) {
if (outlinePage != null) {
outlinePage.handleEditorReconcilation();
}
}
}