| <?xml version="1.0" encoding="ASCII"?> | |
| <markup:Document xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:markup="http://www.eclipse.org/intent/markup/0.7"> | |
| <content xmi:type="markup:Section" level="1"> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="Authors"> | |
| <attributes/> | |
| <format>code</format> | |
| </content> | |
| <content xmi:type="markup:Text" data=" Me" lineBreak="true"/> | |
| <content xmi:type="markup:Text" data="Contact"> | |
| <attributes/> | |
| <format>code</format> | |
| </content> | |
| <content xmi:type="markup:Text" data=" me@mycompany.com"/> | |
| </content> | |
| <content xmi:type="markup:List" listType="TABLE_OF_CONTENT"> | |
| <attributes CSSStyle="list-style: none;" CSSClass="toc"/> | |
| <items listType="NUMERIC" isList="true"> | |
| <attributes/> | |
| <content xmi:type="markup:Link" hrefOrHashName="#UsingtheCompareServices" target="//@content.0"> | |
| <attributes/> | |
| <name> | |
| <content xmi:type="markup:Text" data="Using the Compare Services"/> | |
| </name> | |
| </content> | |
| <items listType="TABLE_OF_CONTENT" imbricationLevel="2" isList="true"> | |
| <attributes CSSStyle="list-style: none;" CSSClass="toc"/> | |
| <items listType="NUMERIC" imbricationLevel="2"> | |
| <attributes/> | |
| <content xmi:type="markup:Link" hrefOrHashName="#Introduction" target="//@content.0/@content.2"> | |
| <attributes/> | |
| <name> | |
| <content xmi:type="markup:Text" data="Introduction"/> | |
| </name> | |
| </content> | |
| </items> | |
| <items listType="NUMERIC" imbricationLevel="2"> | |
| <attributes/> | |
| <content xmi:type="markup:Link" hrefOrHashName="#Gettingthedifferencesoftwomodels" target="//@content.0/@content.3"> | |
| <attributes/> | |
| <name> | |
| <content xmi:type="markup:Text" data="Getting the differences of two models"/> | |
| </name> | |
| </content> | |
| </items> | |
| <items listType="NUMERIC" imbricationLevel="2"> | |
| <attributes/> | |
| <content xmi:type="markup:Link" hrefOrHashName="#Mergingthedifferences" target="//@content.0/@content.4"> | |
| <attributes/> | |
| <name> | |
| <content xmi:type="markup:Text" data="Merging the differences"/> | |
| </name> | |
| </content> | |
| </items> | |
| <items listType="NUMERIC" imbricationLevel="2" isList="true"> | |
| <attributes/> | |
| <content xmi:type="markup:Link" hrefOrHashName="#UsingEMFCompareinstandalonemode" target="//@content.0/@content.5"> | |
| <attributes/> | |
| <name> | |
| <content xmi:type="markup:Text" data="Using EMF Compare in standalone mode"/> | |
| </name> | |
| </content> | |
| <items listType="TABLE_OF_CONTENT" imbricationLevel="3" isList="true"> | |
| <attributes CSSStyle="list-style: none;" CSSClass="toc"/> | |
| <items listType="NUMERIC" imbricationLevel="3"> | |
| <attributes/> | |
| <content xmi:type="markup:Link" hrefOrHashName="#Compilation" target="//@content.0/@content.5/@content.2"> | |
| <attributes/> | |
| <name> | |
| <content xmi:type="markup:Text" data="Compilation"/> | |
| </name> | |
| </content> | |
| </items> | |
| <items listType="NUMERIC" imbricationLevel="3"> | |
| <attributes/> | |
| <content xmi:type="markup:Link" hrefOrHashName="#Launch" target="//@content.0/@content.5/@content.3"> | |
| <attributes/> | |
| <name> | |
| <content xmi:type="markup:Text" data="Launch"/> | |
| </name> | |
| </content> | |
| </items> | |
| </items> | |
| </items> | |
| </items> | |
| </items> | |
| </content> | |
| <content xmi:type="markup:Section" level="2"> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="All the following examples will use a simple (some would say "/> | |
| <content xmi:type="markup:Entity" data="#171"/> | |
| <content xmi:type="markup:Text" data="stupid"/> | |
| <content xmi:type="markup:Entity" data="#187"/> | |
| <content xmi:type="markup:Text" data=") domain model used to keep personal information, here " lineBreak="true"/> | |
| <content xmi:type="markup:Text" data="contact lists." lineBreak="true"/> | |
| <content xmi:type="markup:Text" data="Here is the diagram:" lineBreak="true"/> | |
| <content xmi:type="markup:Image" url="images/AddressBookMM.png"> | |
| <attributes/> | |
| </content> | |
| </content> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="The whole comparison process is divided in two phases :"/> | |
| </content> | |
| <content xmi:type="markup:List" listType="NUMERIC"> | |
| <attributes/> | |
| <items listType="NUMERIC"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="matching both versions of the elements and providing a match model."/> | |
| </items> | |
| <items listType="NUMERIC"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="computing the diff (delta) model from this match."/> | |
| </items> | |
| </content> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="When comparing (using the user interface) two models conformed to the AddressBook metamodel you"/> | |
| <content xmi:type="markup:Entity" data="#8217"/> | |
| <content xmi:type="markup:Text" data="ll get:" lineBreak="true"/> | |
| <content xmi:type="markup:Image" url="images/AddressBookComparaison1.png"> | |
| <attributes/> | |
| </content> | |
| </content> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="This is an emfdiff model displayed using the emf compare editor. Both match and delta information are kept in this model, let"/> | |
| <content xmi:type="markup:Entity" data="#8217"/> | |
| <content xmi:type="markup:Text" data="s have " lineBreak="true"/> | |
| <content xmi:type="markup:Text" data="a further look on the match part:" lineBreak="true"/> | |
| <content xmi:type="markup:Image" url="images/AddressBookMatch.png"> | |
| <attributes/> | |
| </content> | |
| </content> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="The match model weave elements from both versions of the model." lineBreak="true"/> | |
| <content xmi:type="markup:Image" url="images/AddressBookMatchDetail.png"> | |
| <attributes/> | |
| </content> | |
| </content> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="From this match model EMF compare is able to compute the delta (diff):" lineBreak="true"/> | |
| <content xmi:type="markup:Image" url="images/AddressBookDiffDetail.png"> | |
| <attributes/> | |
| </content> | |
| </content> | |
| <attributes id="Introduction"/> | |
| <title> | |
| <content xmi:type="markup:Text" data="Introduction"/> | |
| </title> | |
| </content> | |
| <content xmi:type="markup:Section" level="2"> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="Getting these differences using some code is easy, here is the snippet::"/> | |
| </content> | |
| <content xmi:type="markup:Preformatted"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data=" private DiffModel getDiff(AddressBook v1, AddressBook v2) throws Exception {"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=" Map options = new HashMap();"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=" MatchModel match = MatchService.doContentMatch(v1, v2, options);"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=" // ..."/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=""/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| </content> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="And you"/> | |
| <content xmi:type="markup:Entity" data="#8217"/> | |
| <content xmi:type="markup:Text" data="ll get the Match model which you can browse like any other EMF model." lineBreak="true"/> | |
| <content xmi:type="markup:Text" data="Let"/> | |
| <content xmi:type="markup:Entity" data="#8217"/> | |
| <content xmi:type="markup:Text" data="s now produce the diff from this match information::"/> | |
| </content> | |
| <content xmi:type="markup:Preformatted"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data=" DiffModel diff = DiffService.doDiff(match);"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=" return diff;"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=" }"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=""/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| </content> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="Both Diff and Match services leverage the Eclipse architecture to find the best match/diff engine from the file extension." lineBreak="true"/> | |
| <content xmi:type="markup:Text" data="But EMF Compare can be used to get the differences of two models within Eclipse or out of Eclipse (standalone mode) and using it in standalone mode you"/> | |
| <content xmi:type="markup:Entity" data="#8217"/> | |
| <content xmi:type="markup:Text" data="ll loose the ability of "/> | |
| <content xmi:type="markup:Entity" data="#171"/> | |
| <content xmi:type="markup:Text" data="auto-picking"/> | |
| <content xmi:type="markup:Entity" data="#187"/> | |
| <content xmi:type="markup:Text" data=" the right match/diff engine considering the file extension : you"/> | |
| <content xmi:type="markup:Entity" data="#8217"/> | |
| <content xmi:type="markup:Text" data="ll have to call the engines yourself. Here the generic one::"/> | |
| </content> | |
| <content xmi:type="markup:Preformatted"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data=" private DiffModel getDiff(AddressBook v1, AddressBook v2) throws Exception {"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=" Map options = new HashMap();"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=" MatchModel match = new GenericMatchEngine().contentMatch(v1,v2,options); "/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=" DiffModel diff = new GenericDiffEngine().doDiff(match);"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=" return diff;"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=" }"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=""/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| </content> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="The generic match engine can be parameterized thanks to some options available in the MatchOptions interface:"/> | |
| </content> | |
| <content xmi:type="markup:Table"> | |
| <attributes/> | |
| <content xmi:type="markup:TableRow"> | |
| <attributes/> | |
| <content xmi:type="markup:TableCell" isCellHeader="true"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="Name"/> | |
| </content> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="Description"/> | |
| </content> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="Type"/> | |
| </content> | |
| </content> | |
| <content xmi:type="markup:TableRow"> | |
| <attributes/> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="OPTION_DISTINCT_METAMODELS"/> | |
| </content> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="If set to true, the engine will be able to compare two models from different metamodel and find similarities."/> | |
| </content> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="Boolean"/> | |
| </content> | |
| </content> | |
| <content xmi:type="markup:TableRow"> | |
| <attributes/> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="OPTION_IGNORE_ID"/> | |
| </content> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="If set to true, the engine will ignore the Ecore ID"/> | |
| <content xmi:type="markup:Entity" data="#8217"/> | |
| <content xmi:type="markup:Text" data="s and will consider the elements data to match them."/> | |
| </content> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="Boolean"/> | |
| </content> | |
| </content> | |
| <content xmi:type="markup:TableRow"> | |
| <attributes/> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="OPTION_IGNORE_XMI_ID"/> | |
| </content> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="If set to true, the engine will ignore the XMI ID"/> | |
| <content xmi:type="markup:Entity" data="#8217"/> | |
| <content xmi:type="markup:Text" data="s and will consider the elements data to match them."/> | |
| </content> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="Boolean"/> | |
| </content> | |
| </content> | |
| <content xmi:type="markup:TableRow"> | |
| <attributes/> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="OPTION_SEARCH_WINDOW"/> | |
| </content> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="The search window is the number of elements the engine will consider at the same time, the bigger it is, more precise is the result, but slower is the process."/> | |
| </content> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="Integer"/> | |
| </content> | |
| </content> | |
| <content xmi:type="markup:TableRow"> | |
| <attributes/> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="OPTION_PROGRESS_MONITOR"/> | |
| </content> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="If set with an IProgressMonitor instance, this one will"/> | |
| </content> | |
| <content xmi:type="markup:TableCell"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="IProgressMonitor be used to monitor the match process."/> | |
| </content> | |
| </content> | |
| </content> | |
| <content xmi:type="markup:Quote"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="please note that all these calls can be done with 3 models, left, right and the ancestor one. Then you"/> | |
| <content xmi:type="markup:Entity" data="#8217"/> | |
| <content xmi:type="markup:Text" data="ll be able to detect conflicts."/> | |
| </content> | |
| <attributes id="Gettingthedifferencesoftwomodels"/> | |
| <title> | |
| <content xmi:type="markup:Text" data="Getting the differences of two models"/> | |
| </title> | |
| </content> | |
| <content xmi:type="markup:Section" level="2"> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="Once you get the differences you can merge them. You can merge every detected delta from the diff model using the merge service::"/> | |
| </content> | |
| <content xmi:type="markup:Preformatted"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data=" AddModelElement add = DiffHelper.isAdded(alice, changes);"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=" MergeService.merge(add, false);"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=" "/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| </content> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="Here is a quick view of all the diff elements:" lineBreak="true"/> | |
| <content xmi:type="markup:Image" url="images/DiffMM.jpg"> | |
| <attributes/> | |
| </content> | |
| </content> | |
| <attributes id="Mergingthedifferences"/> | |
| <title> | |
| <content xmi:type="markup:Text" data="Merging the differences"/> | |
| </title> | |
| </content> | |
| <content xmi:type="markup:Section" level="2"> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="You can setup your environment to use EMF Compare in standalone mode. The will looks like this ::"/> | |
| </content> | |
| <content xmi:type="markup:Preformatted"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="	/**"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="	 * This application will try and launch an headless model comparison."/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="	 * "/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="	 * @author Cedric Brun <a href="mailto:cedric.brun@obeo.fr">cedric.brun@obeo.fr</a>"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="	 */"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="	public final class ExampleLauncher {"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="		/**"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="		 * This class doesn't need to be instantiated."/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="		 */"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="		private ExampleLauncher() {"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="			// prevents instantiation"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="		}"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="	"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="		/**"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="		 * Launcher of this application."/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="		 * "/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="		 * @param args"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="		 * Arguments of the launch."/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="		 */"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="		public static void main(String[] args) {"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="			if (args.length == 2 && new File(args[0]).canRead() && new File(args[1]).canRead()) {"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="				// Creates the resourceSet where we'll load the models"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="				final ResourceSet resourceSet = new ResourceSetImpl();"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="				// Register additionnal packages here. For UML2 for instance :"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="	//			Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(UMLResource.FILE_EXTENSION,"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="	//					UMLResource.Factory.INSTANCE);"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="	//			resourceSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="	"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="				try {"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					System.out.println("Loading resources.\n"); //$NON-NLS-1$"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					// Loads the two models passed as arguments"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					final EObject model1 = ModelUtils.load(new File(args[0]), resourceSet);"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					final EObject model2 = ModelUtils.load(new File(args[1]), resourceSet);"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="	"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					// Creates the match then the diff model for those two models"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					System.out.println("Matching models.\n"); //$NON-NLS-1$"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					final MatchModel match = MatchService.doMatch(model1, model2, Collections"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="							.<String, Object> emptyMap());"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					System.out.println("Differencing models.\n"); //$NON-NLS-1$"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					final DiffModel diff = DiffService.doDiff(match, false);"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					System.out.println("Merging difference to args[1].\n"); //$NON-NLS-1$"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					final List<DiffElement> differences = new ArrayList<DiffElement>(diff.getOwnedElements());"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					// This will merge all references to the right model (second argument)."/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					MergeService.merge(differences, true);"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="	"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					// Prints the results"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					try {"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="						System.out.println("MatchModel :\n"); //$NON-NLS-1$"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="						System.out.println(ModelUtils.serialize(match));"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="						System.out.println("DiffModel :\n"); //$NON-NLS-1$"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="						System.out.println(ModelUtils.serialize(diff));"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					} catch (IOException e) {"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="						e.printStackTrace();"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					}"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="	"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					// Serializes the result as "result.emfdiff" in the directory this class has been called from."/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					System.out.println("saving emfdiff as \"result.emfdiff\""); //$NON-NLS-1$"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					final ModelInputSnapshot snapshot = DiffFactory.eINSTANCE.createModelInputSnapshot();"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					snapshot.setDate(Calendar.getInstance().getTime());"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					snapshot.setMatch(match);"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					snapshot.setDiff(diff);"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					ModelUtils.save(snapshot, "result.emfdiff"); //$NON-NLS-1$"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="				} catch (IOException e) {"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					// shouldn't be thrown"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					e.printStackTrace();"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="				} catch (InterruptedException e) {"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="					e.printStackTrace();"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="				}"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="			} else {"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="				System.out.println("usage : ExampleLauncher <Model1> <Model2>"); //$NON-NLS-1$"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="			}"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="		}"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data="	}"/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| <content xmi:type="markup:Text" data=""/> | |
| <content xmi:type="markup:Text" data="
"/> | |
| </content> | |
| <content xmi:type="markup:Section" level="3"> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="The following list of libraries will need to be in the classpath in order to compile:"/> | |
| </content> | |
| <content xmi:type="markup:List"> | |
| <attributes/> | |
| <items> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="org.eclipse.emf.common 2.3 or higher"/> | |
| </items> | |
| <items> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="org.eclipse.emf.ecore 2.3 or higher"/> | |
| </items> | |
| <items> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="org.eclipse.emf.compare 0.8 or higher"/> | |
| </items> | |
| <items> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="org.eclipse.emf.compare.diff 0.8 or higher"/> | |
| </items> | |
| <items> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="org.eclipse.emf.compare.match 0.8 or higher"/> | |
| </items> | |
| </content> | |
| <attributes id="Compilation"/> | |
| <title> | |
| <content xmi:type="markup:Text" data="Compilation"/> | |
| </title> | |
| </content> | |
| <content xmi:type="markup:Section" level="3"> | |
| <content xmi:type="markup:Paragraph"> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="All six aforementionned libraries will be required to be in the classpath for this class to run. Additionally, the following libraries " lineBreak="true"/> | |
| <content xmi:type="markup:Text" data=" are required:"/> | |
| </content> | |
| <content xmi:type="markup:List"> | |
| <attributes/> | |
| <items> | |
| <attributes/> | |
| <content xmi:type="markup:Text" data="org.eclipse.emf.ecore.xmi 2.3 or higher"/> | |
| </items> | |
| </content> | |
| <attributes id="Launch"/> | |
| <title> | |
| <content xmi:type="markup:Text" data="Launch"/> | |
| </title> | |
| </content> | |
| <attributes id="UsingEMFCompareinstandalonemode"/> | |
| <title> | |
| <content xmi:type="markup:Text" data="Using EMF Compare in standalone mode"/> | |
| </title> | |
| </content> | |
| <attributes id="UsingtheCompareServices"/> | |
| <title> | |
| <content xmi:type="markup:Text" data="Using the Compare Services"/> | |
| </title> | |
| </content> | |
| </markup:Document> |