| /******************************************************************************* |
| * Copyright (c) 2013 CEA LIST. |
| * 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: |
| * Cedric Dumoulin - cedric.dumoulin@lifl.fr |
| ******************************************************************************/ |
| package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators; |
| |
| import org.eclipse.emf.common.util.EList; |
| import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.LayersException; |
| import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand; |
| import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.BooleanInstance; |
| import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.ColorInstance; |
| import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.FillInstance; |
| import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersFactory; |
| import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.TypeInstance; |
| |
| |
| /** |
| * @author cedric dumoulin |
| * |
| */ |
| public class FillAverageOperator implements CustomPropertyOperatorsInstance { |
| |
| public static final BooleanInstance FALSE_INSTANCE; |
| public static final BooleanInstance TRUE_INSTANCE; |
| |
| static { |
| FALSE_INSTANCE = LayersFactory.eINSTANCE.createBooleanInstance(); |
| FALSE_INSTANCE.setValue(false); |
| TRUE_INSTANCE = LayersFactory.eINSTANCE.createBooleanInstance(); |
| TRUE_INSTANCE.setValue(true); |
| } |
| |
| /** |
| * |
| * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.operators.CustomPropertyOperatorsInstance#getComputePropertyValueCommand(org.eclipse.emf.common.util.EList) |
| * |
| * @param property |
| * @return |
| * @throws LayersException |
| */ |
| @Override |
| public ComputePropertyValueCommand getComputePropertyValueCommand(EList<ComputePropertyValueCommand> nestedCommand) throws LayersException { |
| return new FillAverageCommand(nestedCommand); |
| } |
| |
| |
| /** |
| * Class implementing an And command. |
| * |
| */ |
| class FillAverageCommand implements ComputePropertyValueCommand { |
| |
| EList<ComputePropertyValueCommand> nestedCommand; |
| |
| /** |
| * |
| * Constructor. |
| * |
| * @param nestedCommand |
| */ |
| public FillAverageCommand(EList<ComputePropertyValueCommand> nestedCommand) { |
| this.nestedCommand = nestedCommand; |
| } |
| |
| /** |
| * Compute the value. |
| * |
| * @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.command.ComputePropertyValueCommand#getCmdValue() |
| * |
| * @return |
| * @throws LayersException |
| */ |
| @Override |
| public TypeInstance getCmdValue() throws LayersException { |
| |
| int fill = 0; |
| int color = 0; |
| // compute the average values |
| for (ComputePropertyValueCommand curCmd : nestedCommand) { |
| FillInstance curValue = ((FillInstance) curCmd.getCmdValue()); |
| fill += curValue.getTransparency(); |
| color += curValue.getFillColor().getValue(); |
| } |
| |
| // Create a result |
| FillInstance res = LayersFactory.eINSTANCE.createFillInstance(); |
| ColorInstance colorInstance = LayersFactory.eINSTANCE.createColorInstance(); |
| res.setFillColor(colorInstance); |
| res.setTransparency(fill / nestedCommand.size()); |
| res.getFillColor().setValue(color / nestedCommand.size()); |
| return res; |
| } |
| |
| } |
| } |