/** * Copyright (c) 2002-2006 IBM Corporation and others. * 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: * IBM - Initial API and implementation */ package org.eclipse.emf.mapping.command; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.edit.command.CommandParameter; import org.eclipse.emf.mapping.Mapping; import org.eclipse.emf.mapping.domain.MappingDomain; public class NameMatchMappingCommand extends MatchMappingCommand { /** * This creates a command that creates a new child mappings for the given mapping * by attempting to match by name input children with output children. */ public static Command create(MappingDomain domain, Mapping mapping) { return domain.createCommand(NameMatchMappingCommand.class, new CommandParameter(mapping)); } public NameMatchMappingCommand(MappingDomain domain, Mapping mapping) { super(domain, mapping); } @Override protected boolean match(Object inputObject, Object outputObject, Collection<Object> mappedObjects) { String inputName = domain.getName(inputObject); String outputName = domain.getName(outputObject); if (inputName != null && outputName != null) { List<String> parsedInputName = domain.parseInputName(inputName); List<String> parsedOutputName = domain.parseOutputName(outputName); if (concatName(parsedInputName).equalsIgnoreCase(concatName(parsedOutputName))) { mappedObjects.add(inputObject); } // int parsedInputSize = parsedInputName.size(); // if (parsedInputSize > 0 && parsedInputSize == parsedOutputName.size()) // { // boolean match = true; // for (int i=0; i < parsedInputSize; i++) // { // String inputWord = (String)parsedInputName.get(i); // String outputWord = (String)parsedOutputName.get(i); // if (!inputWord.equalsIgnoreCase(outputWord)) // { // match = false; // break; // } // } // if (match) // { // mappedObjects.add(inputObject); // } // } } boolean multipleMatchesAllowed = (domain.getMappingEnablementFlags() & MappingDomain.ENABLE_MULTIPLE_INPUTS) != 0; return !multipleMatchesAllowed; // return false if iteration should continue. } protected String concatName(List<String> parsedName) { StringBuilder result = new StringBuilder(); for (String nameComponent : parsedName) { result.append(nameComponent); } return result.toString(); } @Override public void execute() { super.execute(); // Now we'll do recursive MatchMapping. // (We need to iterate over a copy, since we modify the underlying list in the loop.) for (Command command : new ArrayList<Command>(commandList)) { appendAndExecute(NameMatchMappingCommand.create(domain, (Mapping)command.getResult().iterator().next())); } } }