| /******************************************************************************* |
| * Copyright (c) 2015 Obeo. |
| * 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: |
| * Obeo - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.emf.compare.match.impl; |
| |
| import com.google.common.collect.ImmutableList; |
| |
| import java.util.Collection; |
| |
| import org.eclipse.emf.compare.Comparison; |
| import org.eclipse.emf.compare.Match; |
| import org.eclipse.emf.compare.internal.spec.MatchSpec; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.resource.Resource; |
| |
| /** |
| * The not loaded fragment match. |
| * |
| * @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a> |
| * @since 3.2 |
| */ |
| public class NotLoadedFragmentMatch extends MatchSpec { |
| |
| /** The children of the not loaded fragment associated to this match. */ |
| private ImmutableList<Match> children; |
| |
| /** The name of the not loaded fragment associated to this match. */ |
| private String name; |
| |
| /** |
| * Constructor. |
| */ |
| public NotLoadedFragmentMatch() { |
| super(); |
| this.children = ImmutableList.of(); |
| this.name = ""; //$NON-NLS-1$ |
| } |
| |
| /** |
| * Constructor. |
| * |
| * @param child |
| * the child of this not loaded fragment match. |
| */ |
| public NotLoadedFragmentMatch(Match child) { |
| super(); |
| this.children = ImmutableList.of(child); |
| this.name = ""; //$NON-NLS-1$ |
| } |
| |
| /** |
| * Constructor. |
| * |
| * @param children |
| * the children of this not loaded fragment match. |
| */ |
| public NotLoadedFragmentMatch(Collection<Match> children) { |
| super(); |
| this.children = ImmutableList.copyOf(children); |
| this.name = ""; //$NON-NLS-1$ |
| } |
| |
| /** |
| * {@inheritDoc} |
| * |
| * @see org.eclipse.emf.compare.impl.MatchImpl#getComparison() |
| */ |
| @Override |
| public Comparison getComparison() { |
| Comparison ret = null; |
| |
| if (!children.isEmpty()) { |
| Match firstChild = getFirstMatchChild(); |
| EObject eContainer = firstChild.eContainer(); |
| while (!(eContainer instanceof Comparison) && eContainer != null) { |
| eContainer = eContainer.eContainer(); |
| } |
| |
| if (eContainer != null) { |
| ret = (Comparison)eContainer; |
| } |
| } |
| |
| return ret; |
| } |
| |
| /** |
| * Get children. |
| * |
| * @return the children. |
| */ |
| public Collection<Match> getChildren() { |
| return children; |
| } |
| |
| /** |
| * Get name. |
| * |
| * @return the name. |
| */ |
| public String getName() { |
| return name; |
| } |
| |
| /** |
| * Set name. |
| * |
| * @param name |
| * the name to set. |
| */ |
| public void setName(String name) { |
| this.name = name; |
| } |
| |
| /** |
| * Get resource. |
| * |
| * @return the resource. |
| */ |
| public Resource getResource() { |
| final Resource resource; |
| final Match match = getFirstMatchChild(); |
| if (match != null && match.getLeft() != null) { |
| resource = match.getLeft().eResource(); |
| } else if (match != null && match.getRight() != null) { |
| resource = match.getRight().eResource(); |
| } else if (match != null && match.getOrigin() != null) { |
| resource = match.getOrigin().eResource(); |
| } else { |
| resource = null; |
| } |
| return resource; |
| } |
| |
| /** |
| * Get the first match child. |
| * |
| * @return the first match child. |
| */ |
| public Match getFirstMatchChild() { |
| Match match; |
| if (!children.isEmpty()) { |
| match = children.iterator().next(); |
| if (match instanceof NotLoadedFragmentMatch) { |
| match = ((NotLoadedFragmentMatch)match).getFirstMatchChild(); |
| } |
| } else { |
| match = null; |
| } |
| return match; |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| return obj != null && obj.equals(children); |
| } |
| |
| @Override |
| public int hashCode() { |
| return children.hashCode(); |
| } |
| } |