blob: 2ec82464590357854933f27f30f5dc13d653f29a [file] [log] [blame]
/*****************************************************************************
* Copyright (c) 2018 CEA LIST 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:
* CEA LIST - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.custom;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.gmf.runtime.notation.View;
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.LayerExpression;
import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack;
import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property;
import org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.TopLayerOperatorImpl;
/**
* @author QL238289
*
*/
public class CustomTopLayerOperatorImpl extends TopLayerOperatorImpl {
/**
* Get the command to compute the required property value.
* Walk all layers and return the first cmd that is not null for specified view and property.
*
* @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#getComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property)
*
* @param view
* @param property
* @return
* @throws LayersException
*/
@Override
public ComputePropertyValueCommand getComputePropertyValueCommand(View view, Property property) throws LayersException {
// Walk all layers and return the first cmd that is not null for specified view and property.
for (LayerExpression layer : getLayers()) {
ComputePropertyValueCommand cmd = layer.getComputePropertyValueCommand(view, property);
if (cmd != null) {
return cmd;
}
}
// Nothing found
return null;
}
/**
* For each property, add the first property value in the list of result.
*
* @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#getPropertiesComputePropertyValueCommand(org.eclipse.gmf.runtime.notation.View, java.util.List)
*
* @param view
* @param property
* @return
* @throws LayersException
*/
@Override
public List<ComputePropertyValueCommand> getPropertiesComputePropertyValueCommand(View view, List<Property> properties) throws LayersException {
// Simple implementation
// TODO Check if we can optimize
// the result list
List<ComputePropertyValueCommand> resCmds = new ArrayList<ComputePropertyValueCommand>(properties.size());
boolean isCmdFound = false;
for (Property property : properties) {
if (property == null) {
resCmds.add(null);
continue;
}
ComputePropertyValueCommand cmd = getComputePropertyValueCommand(view, property);
if (cmd != null) {
isCmdFound = true;
}
resCmds.add(cmd);
}
// Return appropriate result
if (isCmdFound) {
return resCmds;
} else {
// No command ==> null
return null;
}
}
/**
* For each view, add the first property value in the list of result.
*
*
* @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#getViewsComputePropertyValueCommand(java.util.List, org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.Property)
*
* @param view
* @param property
* @return
* @throws LayersException
*/
@Override
public List<ComputePropertyValueCommand> getViewsComputePropertyValueCommand(List<View> views, Property property) throws LayersException {
// Simple implementation
// TODO Check if we can optimize
// the result list
List<ComputePropertyValueCommand> resCmds = new ArrayList<ComputePropertyValueCommand>(views.size());
boolean isCmdFound = false;
for (View view : views) {
if (view == null) {
resCmds.add(null);
continue;
}
ComputePropertyValueCommand cmd = getComputePropertyValueCommand(view, property);
if (cmd != null) {
isCmdFound = true;
}
resCmds.add(cmd);
}
// Return appropriate result
if (isCmdFound) {
return resCmds;
} else {
// No command ==> null
return null;
}
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
*
* @generated
*/
@Override
public void addLayer(LayerExpression layer) {
// getLayers().add(layer);
// Add layer on top of the stack.
getLayers().add(0, layer);
}
/**
* Propagate the change to children
*
* @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#setIsBranchEnabled(boolean)
*
* @param newIsBranchEnabled
*
* @generated
*/
@Override
public void setIsBranchEnabled(boolean newIsBranchEnabled) {
// First, set the value.
super.setIsBranchEnabled(newIsBranchEnabled);
// Now, propagate
boolean value = isBranchEnabled();
for (LayerExpression layer : getLayers()) {
layer.setIsBranchEnabled(value);
}
}
/**
* Set the value then propagate to children nodes.
*
* @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#setOwningLayersStack(org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.LayersStack)
*
* @param newOwningLayersStack
*
* @generated
*/
@Override
public void setOwningLayersStack(LayersStack newOwningLayersStack) {
// Set the value
super.setOwningLayersStack(newOwningLayersStack);
// Now propagate to children
LayersStack value = getOwningLayersStack();
for (LayerExpression layer : getLayers()) {
layer.setOwningLayersStack(value);
}
}
/**
* <!-- begin-user-doc -->
* Start this element after its reloading by EMF
* This method is called recursively by the parent of this element.
*
* <!-- end-user-doc -->
*
* @throws LayersException
* @generated
*/
@Override
public void attach() throws LayersException {
// Try to attach this Layer
super.attach();
// attach children
for (LayerExpression l : getLayers()) {
l.attach();
}
}
/**
*
* @see org.eclipse.papyrus.internal.infra.gmfdiag.layers.model.layers.impl.LayerExpressionImpl#detach()
*
* @throws LayersException
* @generated
*/
@Override
public void detach() throws LayersException {
// Detach this Layer
super.detach();
// detach children
for (LayerExpression l : getLayers()) {
l.detach();
}
}
/**
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
*
* @deprecated unless we need it again
* @generated
*/
@Deprecated
@Override
public void attachToLayersStack(LayersStack owningLayersStack) {
// the owning stack
setOwningLayersStack(owningLayersStack);
// Ensure child is started, if any
for (LayerExpression l : getLayers()) {
l.attachToLayersStack(owningLayersStack);
}
// Start local behaviors
startBehaviors();
}
}