/*
* Copyright (c) 2006, 2007 Borland Software Corporation
*
* 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:
* Artem Tikhomirov (Borland) - initial API and implementation
*/
package org.eclipse.gmf.internal.common.codegen;
import org.eclipse.emf.codegen.merge.java.JControlModel;
import org.eclipse.emf.codegen.merge.java.JMerger;
import org.eclipse.emf.codegen.merge.properties.PropertyMerger;
/**
* @author artem
*/
public class DefaultTextMerger extends TextMerger {
protected static final String TAG = "gmf generator persistent region"; //$NON-NLS-1$
protected static final String BEGIN_TAG = TAG + " begin"; //$NON-NLS-1$
protected static final String END_TAG = TAG + " end"; //$NON-NLS-1$
private final JControlModel myControlModel;
private final TaggedTextMerger myXmlMerger;
private final PluginXMLTextMerger myPluginXmlMerger;
private final ManifestFileMerge myManifestMerge;
public DefaultTextMerger(JControlModel jModel) {
assert jModel != null;
myControlModel = jModel;
myXmlMerger = new TaggedTextMerger("<!-- " + BEGIN_TAG + " -->", "<!-- " + END_TAG + " -->");
myPluginXmlMerger = new PluginXMLTextMerger("gmfgen", "generated", "true");
myManifestMerge = new ManifestFileMerge();
}
@Override
public String mergeJava(String oldText, String newText) {
if (getJControlModel() == null || !getJControlModel().canMerge()) {
return super.mergeJava(oldText, newText);
}
JMerger jMerge = new JMerger(getJControlModel());
jMerge.setSourceCompilationUnit(jMerge.createCompilationUnitForContents(newText));
jMerge.setTargetCompilationUnit(jMerge.createCompilationUnitForContents(oldText));
jMerge.merge();
return jMerge.getTargetCompilationUnitContents();
}
@Override
public String mergeProperties(String oldText, String newText) {
PropertyMerger propertyMerger = new PropertyMerger();
propertyMerger.setSourceProperties(newText);
propertyMerger.setTargetProperties(oldText);
propertyMerger.merge();
return propertyMerger.getTargetProperties();
}
@Override
public String mergeXML(String oldText, String newText) {
return myXmlMerger.process(oldText, newText);
}
@Override
public String mergePluginXML(String oldText, String newText) {
if (myPluginXmlMerger.isRecognizedDocument(oldText)) {
return myPluginXmlMerger.process(oldText, newText);
}
return mergeXML(oldText, newText);
}
@Override
public String mergeManifestMF(String oldText, String newText) {
return myManifestMerge.process(oldText, newText);
}
private JControlModel getJControlModel() {
return myControlModel;
}
}