/*
* Copyright (c) 2013 Fraunhofer IGD
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* Fraunhofer IGD
*/
package eu.esdihumboldt.hale.app.bgis.ade.duplicate;
import java.util.ArrayList;
import java.util.List;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Multimap;
import eu.esdihumboldt.hale.app.bgis.ade.common.BGISAppConstants;
import eu.esdihumboldt.hale.app.bgis.ade.common.BGISAppUtil;
import eu.esdihumboldt.hale.app.bgis.ade.common.EntityVisitor;
import eu.esdihumboldt.hale.common.align.model.Cell;
import eu.esdihumboldt.hale.common.align.model.Entity;
import eu.esdihumboldt.hale.common.align.model.MutableCell;
import eu.esdihumboldt.hale.common.align.model.impl.DefaultCell;
import eu.esdihumboldt.hale.common.align.model.impl.DefaultProperty;
import eu.esdihumboldt.hale.common.align.model.impl.PropertyEntityDefinition;
/**
* Entity visitor that creates cells from example cells.
*
* @author Simon Templer
*/
public class DuplicateVisitor extends EntityVisitor implements BGISAppConstants {
/**
* The created cells.
*/
private final List<MutableCell> cells = new ArrayList<MutableCell>();
private final Multimap<String, Cell> exampleCells;
private final String cellNote;
/**
* Create an example cell visitor creating derived cells.
*
* @param exampleCells the example cells, with the target ADE property name
* as key
* @param cellNote note to append to generated cell's notes
*/
public DuplicateVisitor(Multimap<String, Cell> exampleCells, String cellNote) {
this.exampleCells = exampleCells;
this.cellNote = cellNote;
}
@Override
protected boolean visit(PropertyEntityDefinition ped) {
if (ADE_NS.equals(ped.getDefinition().getName().getNamespaceURI())) {
// property is from ADE
for (Cell exampleCell : exampleCells.get(ped.getDefinition().getName().getLocalPart())) {
// handle each example cell
// copy cell
DefaultCell cell = new DefaultCell(exampleCell);
// reset ID
cell.setId(null);
// assign new target
ListMultimap<String, Entity> target = ArrayListMultimap.create();
target.put(cell.getTarget().keys().iterator().next(), new DefaultProperty(ped));
cell.setTarget(target);
BGISAppUtil.appendNote(cell, cellNote);
cells.add(cell);
}
return true;
}
return false;
}
/**
* Get the created cells.
*
* @return the cells assigning default values
*/
public List<MutableCell> getCells() {
return cells;
}
}